자료구조와 알고리즘/Baekjoon

[백준][C++][Python] 2752번: 세 수 정렬

최문경 블로그 2019. 9. 29. 14:42

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

 

2752번: 세수정렬

숫자 세 개가 주어진다. 이 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 숫자는 모두 다르다.

www.acmicpc.net

 

처음에 풀 때 경우의 수가 너무 많이 생각나서 간단히 풀 수 있는 방법이 없을까 고민하다가 생각이 안나서 구글링으로 알아냈다. 정말 참신한 풀이..!

 

 C++ 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std
 
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    int a, b, c, t;
    cin >> a >> b >> c;
 
    if (a > b) {
        t = a; a = b; b = t;
    }
    if (b > c) {
        t = b; b = c; c = t;
    }
    if (a > b) {
        t = a; a = b; b = t;
    }
 
    cout << a << " " << b << " " << c;
}
 
cs

 

이 풀이의 아이디어는 이렇다.

< 큰 수를 제일 오른쪽으로 옮긴다!> (내림차순으로 출력해야 한다면 큰 수를 왼쪽으로 옮겨야할 것이다.)

 

1. a 와 b 를 비교해서 큰 수를 b로 옮긴다.

2. b 와 c 를 비교해서 큰 수를 c로 옮긴다.


1, 2번을 실행한 후에는 a, b, c중에서 가장 큰 수가 c에 들어가 있을 것이다.

 

3. 마지막으로 a, b를 비교해서 더 큰 수를 b에 넣어준다.

 

 

 

 Python 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a, b, c = map(int, input().split())
 
if a > b:
    t = a
    a = b
    b = t
if b > c:
    t = b
    b = c
    c = t
if a > b:
    t = a
    a = b
    b = t
 
print("{} {} {}".format(a, b c))
cs

 

 

 C++  C++ 

출처: https://jeonggyun.tistory.com/75