카테고리 없음
[백준 알고리즘] 10814 - 나이순 정렬
soom22
2023. 7. 9. 23:34
SMALL
N=int(input())
person=[]
for i in range(N):
age,name=list(map(str, input().split()))
person.append([int(age),i, name])
person.sort()
for i in range(N):
print(str(person[i][0])+" "+person[i][2])
더보기
예제 입력
3
21 Junkyu
21 Dohyun
20 Sunyoung
예제 출력
20 Sunyoung
21 Junkyu
21 Dohyun
떠올린 접근 방식, 과정
age랑 name을 일단 str로 따로 입력받은 후 person에다가 age는 int, name은 str그대로 넣어주어 배열을 순서대로 정렬한 후 출력해준다.
해당 접근 방식에 쓰이는 알고리즘과 판단 사유
정렬을 위해 sort를 사용했다. sort는 시간복잡도가 NlogN으로 가장 빠르다고 생각했다.
접근법의 총 시간복잡도
sort의 시간복잡도인 O(NlogN)이라고 생각한다.
(에러 오류가 발생했다면) 해결 과정
더보기
오류 코드
N=int(input())
person=[]
for i in range(N):
age,name=list(map(str, input().split()))
person.append([int(age), name])
person.sort()
for i in range(N):
print(person[i])
먼저 시간 초과를 해결하려했다. sort를 for문 내부에 넣어놔서 sort가 N번이나 돌아갔었다. 그래서 sort를 밖으로 빼내주고 제출했더니 틀렸다고 나왔다.
input 순서대로 정렬을 안해줬기 때문인데 어떻게 해결해야할 지 막막할 때 근성이가 도와줬다.
person에 넣을 때 age 랑 name 사이에 i를 넣어주면 input 순서가 빠를수록 i는 작고 age가 같을 경우엔 i로 비교하니깐 들어온 순으로 정렬할 수 있게 되었다.
print할때에는 i를 빼고 출력해주면 된다.
개선 방법
배열 내부에 임의의 값을 넣는 것을 두려워하지 말고, 출력할 때만 제대로 출력해주면 된다.