/* 내 코드 */
#include <stdio.h>
int main() {
int n[4];
int min = 999, max = -999;
int min_locate, mid_locate, max_locate;
scanf("%d %d %d", &n[0], &n[1], &n[2]);
for (int i = 0; i < 3; i++) { // 최대값, 최소값 찾기
if (min > n[i]) {
min = n[i];
min_locate = i;
}
if (max < n[i]) {
max = n[i];
max_locate = i;
}
}
for (int i = 0; i < 3; i++) { // 최대값, 최소값이 저장된 위치를 바탕으로 중간값이 저장된 위치를 추측
if (i == min_locate || i == max_locate)
continue;
mid_locate = i;
}
if (n[0] == n[1] || n[1] == n[2]) // 값이 같은 부분이 있을 경우에 관한 처리
printf("%d", n[1]);
else if (n[2] == n[0])
printf("%d", n[2]);
else
printf("%d", n[mid_locate]);
}
/* 모범 코드 */
#include <stdio.h>
int main()
{
int A, B, C;
scanf("%d %d %d", &A, &B, &C);
if ((A > B) != (A > C)) printf("%d", A); // A와 B를, A와 C를 비교해서 하나라도 A가 크면 B,C보다 A보다 큰게 하나. A보다 작은게 하나가 있다는 이야기가 된다.
else ((A > B) == (B > C)) ? printf("%d", B) : printf("%d", C); // 첫 번째 조건은 확실하지 않다. 하지만 두 번째 조건은 A>C>B가 되어 C가 답이 된다. 그럼 첫 번째는 자연스럽게 B가 된다.
return 0;
}
나는 최솟값과 최댓값의 위치를 파악해서 중간값을 유추한 다음, a, b, c 중 2개 이상이 같은 값을 가질 때에 맞는 처리를 한 다음 출력하는 방식을 사용했다.
따라서 배열을 이용하였고, 특정 숫자가 들어있는 위치를 파악하기 위해 int형 변수를 따로 선언하였다.
이 글을 적으면서 다시 살펴보니 그냥 값들을 정렬해서 중간값만 빼오는 방법을 사용하면 더 간단하게 해결할 수 있을 것 같다는 생각이 든다.
이 문제는 1달 전 나에게 고비를 가져다준 문제였으나, 브론즈 상위 문제와 실버 하위 문제에 얻어맞으며 힘을 기른 지금의 나에겐 그렇게까지 어려운 문제는 아니었다.
하지만 내 문제풀이 방식을 보면... 계속 공부하는 수밖에!