반응형
아아아ㅏㅏㅏㅏ 너무 지치는 문제다
처음에 접근을 잘못했다.
시뮬레이션으로 생각안하고
A,B,C 크기 조건에 따라 규칙적인 값이 있을 것이라고 생각했다.
(1) C=A=B
-> C
(2) A,B > C
-> C
(3) A >= C >= B
-> B, C, C-B
B >= C >= A
-> A, C, C-A
(4) C >= B >= A
C >= A >= B
(1), (2), (3)의 경우는 맞지만 (4)의 경우는 시뮬레이션을 하는게 맞는 것 같다,,,,,,
아니면 A,B,C의 약수가 공통으로 있다면(배수관계라면) 규칙성을 찾을 수 있고,,,,, 하아,, 어렵다,,,,,
(참고로 위처럼 크기로 조건을 나눠서 푼다면, (1)중복값을 체크해서 제외 (2)오름차순으로 정렬 을 까먹으면 안된다.)
시뮬레이션으로 다시 풀어봐야겠다.
틀렸던 C언어 구현 코드
#include < iostream > #include < vector > #include < algorithm > using namespace std; int A, B, C; vector<int> answer; // vector에 이미 값이 있으면 return 1 // 없으면 return 0 int isAlreadythere(int _v) { for (int k = 0; k < answer.size(); k++) { if (answer.at(k) == _v) { return 1; } } return 0; } int main(void) { cin >> A >> B >> C; // 1. 세 개 모두 같은 경우 // 2. C가 가장 작은 경우 if ( (A == B && A == C) || (A > C && B > C)) { cout << "0 "<< C << endl; return 0; } // 3. C가 두 번째로 큰 경우 if (A >= C && C >= B) { answer.push_back(C); answer.push_back(B); answer.push_back(C - B); } else if ( B >= C && C >= A ) { answer.push_back(C); answer.push_back(A); answer.push_back(C - A); }// 4. C가 가장 큰 경우 else if ( C >= A && C >= B) { int sum_ab = A + B; if (A >= B) { if (C == sum_ab) { answer.push_back(C); if (isAlreadythere(C - B) == 0) { answer.push_back(C - B); } } else if (C>sum_ab) { // C > A >= B && C >= A+B answer.push_back(C); if (isAlreadythere(C-A)==0) { answer.push_back(C - A); } if (isAlreadythere(C - B) == 0) { answer.push_back(C - B); } } else { // C > A >= B && C < A+B answer.push_back(C); if (isAlreadythere(C - B) == 0) { answer.push_back(C - B); } if (isAlreadythere(A) == 0) { answer.push_back(A); } if (isAlreadythere(B) == 0) { answer.push_back(B); } } } else { // A < B if (C >= sum_ab) { // C > B > A && C >= A+B answer.push_back(C); if (isAlreadythere(C-A) == 0) { answer.push_back(C-A); } if (isAlreadythere(C - B) == 0) { answer.push_back(C - B); } } else { // C > B > A && C < A+B answer.push_back(C); if (isAlreadythere(C - A) == 0) { answer.push_back(C - A); } if (isAlreadythere(C - B) == 0) { answer.push_back(C - B); } if (isAlreadythere(A) == 0) { answer.push_back(A); } if (isAlreadythere(B) == 0) { answer.push_back(B); } } } } int answer_sz = answer.size(); sort(answer.begin(), answer.end()); for (int k = 0; k < answer_sz-1; k++) { cout << answer.at(k) << " "; } cout << answer.at(answer_sz-1) << endl; return 0; }
반응형