반응형
https://www.acmicpc.net/problem/3967
3967번: 매직 스타
매직 스타의 모양이 주어진다. 수가 채워져 있지 않은 곳은 x로, 채워져 있는 곳은 'A'부터 'L'까지 알파벳으로 채워져 있다. i번째 알파벳은 숫자 i를 의미한다. '.'는 매직 스타의 형태를 만들기
www.acmicpc.net
[ 문제풀이 ]
1. 매직 스타를 입력받고, 채워지지 않은 위치를 pos에 저장합니다.
2. 재귀함수를 이용하여 각 자리에 알파벳을 채워주고, 각 줄의 합이 282보다 크다면 return해줍니다.
3. 모든 자리가 다 찬다면 그대로 출력해줍니다.
[ 소스코드 ]
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include<iostream> #include<string> #include<vector> using namespace std; string str[5]; char arr[12]; int visited[12]; vector<int> pos; bool flag = false; void dfs(int level) { if (flag) return; if (arr[1] + arr[2] + arr[3] + arr[4] > 282) return; if (arr[0] + arr[2] + arr[5] + arr[7] > 282) return; if (arr[0] + arr[3] + arr[6] + arr[10] > 282) return; if (arr[7] + arr[8] + arr[9] + arr[10] > 282) return; if (arr[1] + arr[5] + arr[8] + arr[11] > 282) return; if (arr[4] + arr[6] + arr[9] + arr[11] > 282) return; if (level == pos.size()) { int cnt = 0; flag = true; for (int i = 0; i < 5; i++) { for (int j = 0; j < 9; j++) { if (str[i][j] != '.') { cout << arr[cnt++]; } else { cout << str[i][j]; } } cout << '\n'; } return; } for (int i = 0; i < 12; i++) { if (visited[i] == 0) { visited[i] = 1; arr[pos[level]] = i + 'A'; dfs(level + 1); visited[i] = 0; arr[pos[level]] = 0; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for (int i = 0; i < 5; i++) { cin >> str[i]; } int cnt = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 9; j++) { if (str[i][j] != '.') { if (str[i][j] == 'x') { pos.push_back(cnt++); } else { visited[str[i][j] - 'A'] = 1; arr[cnt++] = str[i][j]; } } } } dfs(0); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 11567번 - 선진이의 겨울 왕국 (C++) (0) | 2023.09.07 |
---|---|
[ 백준 ] 3184번 - 양 (C++) (0) | 2023.09.06 |
[ 백준 ] 2146번 - 다리 만들기 (C++) (0) | 2023.09.04 |
[ 백준 ] 1486번 - 등산 (C++) (0) | 2023.09.03 |
[ 백준 ] 7299번 - Food Cubes (C++) (0) | 2023.09.02 |