백준/브론즈4

[Python/C] 백준 2752번 - 세수정렬

두부마라탕 2025. 4. 13. 15:58

https://www.acmicpc.net/problem/2752


문제

동규는 세수를 하다가 정렬이 하고 싶어졌다.

정수 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어졌다.

정수 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오.

 

[Python] 코드

a, b, c = map(int, input().split())

nums = sorted([a, b, c])

print(*nums)

 

풀이

1. map과 split함수를 이용해서 받아온 수를 정수로 분리하여 abc에 저장한다

2. 그 다음 abc를 넣은 리스트를 sorted해서 정렬한 리스트를 새로 반환한다

3. *을 사용해서 리스트를 공백으로 나눠 출력한다.

 

위를 한 줄로 표시 가능한데 그 코드는 바로 다음과 같다

print(*sorted(map(int, input().split())))

위의 풀이를 그냥 한 줄로 다 모아 나타낸 것이다. 풀어 쓰면 위의 코드와 같다.

 

[C] 코드

#include <stdio.h>

int main() {
    int arr[3];
    int num, tmp;

    for (int i = 0; i < 3; i++) {
        scanf("%d", &num);
        arr[i] = num;
    }

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }

    for (int i = 0; i < 3; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

 

풀이

1. 배열을 생성한 후 반복문을 사용하여 입력을 받아 i 인덱스에 값을 넣는다.

    1-1. 이제 생각해보니 그냥 3개 정수 한 번에 받아서 배열을 생성하는게 더 효율적일 것 같다. 이렇게 말이다.

    int a, b, c, tmp;
    scanf("%d %d %d", &a, &b, &c);
    int arr[3] = {a, b, c};

    근데 위의 코드는 배열 먼저 만들어버려서 귀찮은 일을 했다....

2. 버블 정렬을 사용해서 오름차순으로 만들어준다.

3. 이제 정리된 값을 출력해준다.