백준 알고리즘 - 10817번 세 수 문제입니다.


(참고 - https://www.acmicpc.net/problem/10817 )



코드(1) - 변수의 단순비교 조건 이용

#include <stdio.h>
int main() {

int num1, num2, num3;

scanf("%d %d %d", &num1, &num2, &num3);

if(num1 > num2) {

if(num1 > num3) {

if(num2 > num3) printf("%d", num2);

else printf("%d", num3);

}

else printf("%d", num1);

}

else {

if(num2 > num3) {

if(num1 > num3) printf("%d", num1);

else printf("%d", num3);

}

else printf("%d", num2);

}

return 0;

}


코드(2) - 배열을 이용한 비교

#include <stdio.h>

int main() {

int arr[3], i, j, tmp;

scanf("%d %d %d", &arr[0], &arr[1], &arr[2]);

for(i=0; i<3; i++)

for(j=0; j<2; j++)

if(arr[j] >= arr[j+1]) {

tmp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = tmp;

}

printf("%d\n", arr[1]);

return 0;

}


- 코드를 두 가지로 올린 것은 문득 두 방법의 차이를 비교하며 설명하고 싶었기 때문입니다.

코드(1) 의 결과


코드(2) 의 결과


두 가지 방법의 차이를 파악하셨나요.

첫번째 코드의 경우에는 단순히 일일이 비교해가며 조건을 설정하였기 때문에 코드의 길이는 길어질수밖에 없는 대신 변수만을 이용하기 때문에 메모리의 크기는 상대적으로 적게 잡아먹게 됩니다.

그에 반하여 두번째 코드의 경우에는 배열을 추가적으로 사용하기 때문에 메모리를 상대적으로 더 잡아먹게 되는 대신 코드의 길이는 비약적으로 줄일 수 있습니다.


이러한 두 가지 차이와 더불어 가장 중요한 '시간'에 대한 부분은 사실 너무 적은 케이스이기 때문에 차이가 안나는 것 처럼 보이지만, 만약 세 수에 대한 비교가 아니라 매우 많은 수들에 대한 비교라면 똑같은 방법을 취했을 때에는 코드(2)의 정렬을 이용하여 계산하는 시간이 더 걸릴 것입니다. 코드(1)의 경우에 for문을 이용하지 않기 때문이죠.

다만, 코드(1)의 방법으로는 상상할 수 없을만큼 코드길이가 길어질 것입니다. 간단한 문제가 아닌 이상에야 단순비교만큼 무식한 방법이 없...겠죠?


이러한 방법들을 비교해가며 차이를 조금 더 피부로 느끼면 어떨까해서 올려보았습니다.

사실 문제에 적합한 비교예시는 아니었던 것 같습니다.. ( _ _ ) 그냥 정말 문득생각나서....


WRITTEN BY
SiriusJ

,