# 문제링크
10 15 35 나, 15 10 35 나, 35 10 15나,,,, 같은 숫자 구성이다. 어차피 같은 숫자 구성인데 각각 진행시켜 줄 필요가 없다. 세 수를 오름차순으로 정렬해서 체크를 재주면 visited[500][500][500] 에 체크를 다 해줄 수 있다.
세 수의 비교 코드,, C언어 배울 때 if else 문 chapter 에서 국룰이었는데.. 그 때 생각하며 if else 를 열씸히 적었다.. 배열로 만들어서 정렬하면 편하겠다고 생각을 했는데, DFS에서 직접 배열에 담아서 진행을 시키는 게 또 복잡하게 느껴졌다.. 막 배열에서 더했다가 뺐다가 그러는게 귀찮은 것 같아서 그냥 세 수의 비교 코드를 짰다..
엄청난 노가다? 코드.. 나의 장인정신이 느껴지는가......ㅎ.ㅠ.ㅠㅎ.ㅠ
# 제출 코드
#include <cstdio>
using namespace std;
int A, B, C;
bool visited[500][500][500];
// 오름차순 정렬
void Sort(int* a, int* b, int* c) {
int aa = *a; int bb = *b; int cc = *c;
if (*a > *b) {
if (*b > *c) {
*a = cc;
*c = aa;
}
else if(*a > *c){
*a = bb;
*b = cc;
*c = aa;
}
else {
*a = bb;
*b = aa;
}
}
else {
if (*a > *c) {
*a = cc;
*b = aa;
*c = bb;
}
else if (*b > *c) {
*b = cc;
*c = bb;
}
}
return;
}
bool DFS(int a, int b, int c) {
Sort(&a, &b, &c);
if (a == b && b == c) return true;
if (visited[a][b][c]) return false;
visited[a][b][c] = true;
if (a < b) {
if(DFS(a + a, b - a, c))return true;
}
if (a < c) {
if(DFS(a + a, b, c - a)) return true;
}
if (b < c) {
if(DFS(a, b + b, c - b)) return true;
}
return false;
}
int main() {
scanf("%d %d %d", &A, &B, &C);
printf("%d\n", DFS(A, B, C));
}
반응형
'Computer Science&Engineering > 코딩테스트' 카테고리의 다른 글
코딩테스트 전날.. 실수 정리 (0) | 2021.04.24 |
---|---|
[ 백준 17136 ] 색종이 붙이기 (C++) (0) | 2021.04.24 |
[ 백준 19238 ] 스타트 택시 (0) | 2021.04.22 |
[ 백준 9207 ] 페그 솔리테어 (C++) (0) | 2021.04.21 |
[ 백준 17281 ] ⚾ 야구 구현 문제 (0) | 2021.04.20 |