https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
풀이는 역시나 단순하다. 백준 저지에서 solved.ac 설정을 수정하면 문제별로 난이도가 표시되는데, 실버 수준의 문제들은 사실 그렇게 어렵게 느껴지지는 않는 것 같다. 문제는 시간 복잡도다. 문제에서 제한한 조건에 따라서 어떻게 풀지를 설계해야 하는데, 그 해석이 잘 안돼서 구현은 가능하지만 이 풀이가 문제가 요구하는 바에 부합하는지 판단을 내리는 게 조금 까다롭다.
해야지, 해야지 생각은 하는데 정말 조만간에 복잡도에 대해 공부 좀 해보자.
# PYTHON CODE (1)
1
2
3
4
5
6
7
8
9
10
11
12
|
import sys
n = int(sys.stdin.readline())
s = []
for i in range(n):
a, b = sys.stdin.readline().split()
s.append([int(a), str(b)])
s.sort(key=lambda x: x[0])
for i in s:
print(*i)
|
cs |
str인 숫자의 크기 비교는 조심해야할 필요가 있다.
1
2
|
print('9' <' 11') # return False
print('20' < '22') # return True
|
cs |
위와 같이 같은 자릿수에서는 문제가 되지 않지만, 가장 앞의 인덱스를 기준으로 크기 비교가 이루어지기 때문에 세심한 주의가 필요하다.
# PYTHON CODE (2)
1
2
3
4
5
6
7
8
9
10
|
import sys
N = int(input())
people = [[] for _ in range(201)]
for _ in range(N):
person = list(sys.stdin.readline().split())
people[int(person[0])].append(person[1])
for i in range(201):
for j in people[i]:
print(i, j)
|
cs |
이 풀이는 정렬이라기보다는, 리스트를 이용한 풀이인데 나름의 센스가 돋보이는 것 같아서 가져왔다. 백준 저지의 맞은 사람 풀이 중 꽤 빠른 속도를 자랑하는 풀이다.
한 가지 의외였던 점은, [None]일 때는 print를 진행하지만, []일때는 print를 해주지 않는다는 점.
output을 구미에 당기게 조절할 때 유용하지 않을까 싶다.
1
2
3
4
|
list1 = []
list2 = [None]
print(*list1) # return
print(*list2) # return None
|
cs |
'백준 > 정렬' 카테고리의 다른 글
[Python] 백준, 5052(정렬 알고리즘) (0) | 2021.08.28 |
---|---|
[Python] 백준, 1026(정렬) (0) | 2021.08.22 |
[Python] 백준, 1181(정렬) (0) | 2021.08.19 |
[Python] 백준, 1427(정렬) (0) | 2021.08.18 |
[Python] 백준, 2751(정렬) (0) | 2021.08.18 |