# 문제

# 입력 및 출력

# 풀이
이 풀이가 맞는진 모르겠는데 그냥 전부 내가 모든 케이스를 찾아보았다.
병에서 4단위로 모든 케이스가 반복된다.
주어진 조건에선 따로 병의 순서는 정해주지 않았기 때문에
1 0 0 의 케이스든 0 1 0 의 케이스든 답은 모두 동일하게 나온다.
따라서 dp[4][4][4]를 선언해놓고 -1이 되는 케이스를 따로 지정해줬다.
1) 0 0 1
2) 0 2 2
3) 0 3 3
4) 1 1 1
5) 1 2 3
위 케이스의 경우에만 -1이 되고 나머진 전부 1이 된다.
앞서 말했듯이 순서는 상관이 없기 때문에 조건문을 편하게 사용하기 위해 정렬을 해줬다.
sort(check, check+3, less<int>());
이 부분에서 처음에 less<>()를 사용했다가 컴파일 에러가 났다.

찾아보니까 자료형을 써주지 않으면 안된다고 한다.
https://itguava.tistory.com/67
[C++ / STL] sort 함수를 활용한 오름차순 / 내림차순 정렬
blog post Sort 알고리즘 얼마전 현장 코딩 테스트에서 Sort 함수를 활용한 내림차순 정렬을 구현하려고 했는데 키워드가 생각이 안나서 써먹지 못한 경험이 있습니다. 결국은 직접 내림차순 정렬을
itguava.tistory.com
visual studio에선 돌아가는데 espa의 컴파일러에선 돌아가지 않는 것 같았다.
그래서 자료형 int를 써주니 제대로 동작함.
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("coin.inp");
ofstream fout("coin.out");
int dp[4][4][4], check[3];
int main() {
int n, a, b, c;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
check[0] = i, check[1] = j, check[2] = k;
sort(check, check + 3, less<int>());
if (check[0] == 0) {
if (check[1] == 0 && check[2] == 1) dp[i][j][k] = -1;
else if (check[1] == 2 && check[2] == 2) dp[i][j][k] = -1;
else if (check[1] == 3 && check[2] == 3) dp[i][j][k] = -1;
}
else if (check[0] == 1) {
if (check[1] == 1 && check[2] == 1) dp[i][j][k] = -1;
if (check[1] == 2 && check[2] == 3) dp[i][j][k] = -1;
}
if (dp[i][j][k] != -1) dp[i][j][k] = 1;
}
}
}
fin >> n;
while (n--) {
fin >> a >> b >> c;
fout << "(" << a << " " << b << " " << c << ") : ";
fout << dp[a % 4][b % 4][c % 4] << "\n";
}
}

이렇게 푸는 게 맞는진 모르겠는데 해결했다ㅎ,,
'Algorithm > 🏫assignment' 카테고리의 다른 글
# 카드 선택 (0) | 2022.10.08 |
---|---|
# 정육면체 (0) | 2022.10.07 |
# 격자 경로 (0) | 2022.09.30 |
# Bitmap (0) | 2022.09.26 |
# 순열을 이진트리로 (0) | 2022.09.23 |
댓글