λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”₯ PS(Problem Solving) πŸ”₯/BOJ

[BOJ] #2309 일곱 λ‚œμŸμ΄

by dar0m! 2019. 9. 19.
μ‹œκ°„ μ œν•œ λ©”λͺ¨λ¦¬ μ œν•œ μ •λ‹΅ λΉ„μœ¨
2 초 128 MB 46.670%

 

 

2309번: 일곱 λ‚œμŸμ΄

아홉 개의 쀄에 걸쳐 λ‚œμŸμ΄λ“€μ˜ ν‚€κ°€ 주어진닀. μ£Όμ–΄μ§€λŠ” ν‚€λŠ” 100을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ©°, 아홉 λ‚œμŸμ΄μ˜ ν‚€λŠ” λͺ¨λ‘ λ‹€λ₯΄λ©°, κ°€λŠ₯ν•œ 정닡이 μ—¬λŸ¬ 가지인 κ²½μš°μ—λŠ” μ•„λ¬΄κ±°λ‚˜ 좜λ ₯ν•œλ‹€.

www.acmicpc.net

 

9λͺ…μ˜ λ‚œμŸμ΄λ“€ 쀑 μ§„μ§œ λ‚œμŸμ΄λŠ” 7λͺ…이닀. λ‹€ν–‰νžˆ 7λͺ…μ˜ λ‚œμŸμ΄λ“€μ˜ ν‚€μ˜ 합은 100μž„μ„ μ•Œκ³  μžˆλ‹€. 9λͺ…μ˜ λ‚œμŸμ΄λ“€μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ μ§„μ§œ λ‚œμŸμ΄ 7λͺ…을 μ°Ύμ•„ 좜λ ₯ν•˜λΌ!

 

λ©”λͺ¨λ¦¬ μ‹œκ°„
1998 KB  0 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[10], flg;
vector<int> v;
void dfs(int idx, int sum) {
    if (idx > 9 || flg) return;
    if (v.size()==7) {
        if (sum == 100) {
            sort(v.begin(), v.end());
            for (int i = 0; i < 7; i++) {
                printf("%d\n", v[i]);
            }
            flg = 1;
        }
        return;
    }
    v.push_back(arr[idx]);
    dfs(idx + 1,  sum + arr[idx]);
    v.pop_back();
    dfs(idx + 1, sum);
}
int main() {
    for (int i = 0; i < 9; i++)
        scanf("%d"&arr[i]);
 
    dfs(00);
 
    return 0;
}
cs

 

μŠ€ν„°λ””μ—μ„œ ν”Όλ“œλ°± 받은 λΆ€λΆ„

ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜μ— cnt λΌλŠ” 값을 μΆ”κ°€ν•˜μ—¬ vectorμ—μ„œ arr[idx]번째 인자λ₯Ό λΊ„ λ•Œλ§ˆλ‹€ cnt λ₯Ό 1μ”© μ¦κ°€μ‹œν‚€λ„λ‘ ν•˜μ—¬ cntκ°€ 3이상일 λ•ŒλŠ” return λ˜κ²Œλ” ν•˜λΌ.

μ΄μœ λŠ” λ‚œμŸμ΄λŠ” 무쑰건 9λͺ…이 λ“€μ–΄μ˜€κ³ , 7λͺ…μ˜ λ‚œμŸμ΄λ§Œ 선택해야 ν•˜λ―€λ‘œ 6λͺ… μ΄ν•˜μ˜ λ‚œμŸμ΄λ“€μ˜ ν‚€μ˜ 합은 λ³Ό ν•„μš”κ°€ μ—†λ‹€. λ”°λΌμ„œ ν•„μš”μ—†λŠ” 탐색을 ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

λŒ“κΈ€