반응형
https://www.acmicpc.net/problem/2116
2116번: 주사위 쌓기
첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는
www.acmicpc.net
[ 문제풀이 ]
1. 모든 주사위를 입력받고, 첫 주사위의 바닥이 A일 때부터 F일 때까지 for문을 통해 돌면서 모든 경우의 수를 구합니다.
2. 주사위의 바닥이 정해지면 윗면이 정해지고, 두 면을 제외한 나머지 수 중 가장 큰 수를 Max에 저장하고, 쌓여 있는 모든 주사위의 옆면 중 Max 값을 ret에 더해줍니다.
3. ret 값중 가장 큰 값을 ans에 저장하고, 출력합니다.
[ 소스코드 ]
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include<iostream> using namespace std; int N; int arr[10000][6]; int ans; int getSum(int n) { int temp = arr[0][n]; int idx = n; int ret = 0; int Max = 0; for (int i = 0; i < N; i++) { Max = 0; for (int j = 0; j < 6; j++) { if (arr[i][j] == temp) { idx = j; break; } } if (idx == 0 || idx == 5) { for (int j = 0; j < 6; j++) { if (j != 0 && j != 5) { Max = max(Max, arr[i][j]); } } if (idx == 0) { temp = arr[i][5]; } else { temp = arr[i][0]; } } else if (idx == 1 || idx == 3) { for (int j = 0; j < 6; j++) { if (j != 1 && j != 3) { Max = max(Max, arr[i][j]); } } if (idx == 1) { temp = arr[i][3]; } else { temp = arr[i][1]; } } else { for (int j = 0; j < 6; j++) { if (j != 2 && j != 4) { Max = max(Max, arr[i][j]); } } if (idx == 2) { temp = arr[i][4]; } else { temp = arr[i][2]; } } ret += Max; } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N; for (int i = 0; i < N; i++) { for (int j = 0; j < 6; j++) { cin >> arr[i][j]; } } for (int i = 0; i < 6; i++) { ans = max(ans, getSum(i)); } cout << ans; } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 2479번 - 경로 찾기 (C++) (0) | 2023.08.22 |
---|---|
[ 백준 ] 2591번 - 숫자카드 (C++) (0) | 2023.08.21 |
[ 백준 ] 10216번 - Count Circle Groups (C++) (0) | 2023.08.19 |
[ 백준 ] 3067번 - Coins (C++) (0) | 2023.08.18 |
[ 백준 ] 16965번 - 구간과 쿼리 (C++) (0) | 2023.08.17 |