본문 바로가기
알고리즘/정렬

[백준 10814번]나이순 정렬(파이썬)

by 영재진 2023. 1. 20.

문제 설명

 

1. 과정

 

사실 이 문제는 어렵지 않다고 생각해서 굳이 블로그에 기록하지 않으려고 했다. 

하지만 ..

 

 

세 번이나 틀렸다 !! ㅎㅎ

 

결론 먼저 이야기하자면,

문제에서는 나이는 1보다 크거나 같으며 200보다 작거나 같은 정수, 이름은 알파벳 대소문자로 이루어져 있고 길이가 100보다 작거나 같은 문자열이라고 언급했지만 내가 이를 제대로 체크하지 못했다.

 

# 나이순 정렬
import sys
input = sys.stdin.readline

n = int(input())

members = []

for _ in range(n):
    members.append(input().split())

members.sort(key=lambda x: x[0])

for age, name in members:
    print(age, name)

 

내가 처음 작성한 이 코드는 나이도 문자열로 취급하여 출력했다. 따라서 문제에서 제시한 조건에 맞지 않기 때문에 오답이다.

나이를 문자열로 취급한 상태로, 올바르게 정렬이 되고는 있는지 확인해보기 위해서 단순 출력해보았다. 

 

위: sort 전/ 아래: sort 후

 

나이(숫자)가 문자열 타입이어도 순서대로 정렬은 잘 되는 것을 볼 수 있다. 

때문에 나는 출력 결과만 보고 왜 오답인지 한참을 찾지 못했다.....

 

하지만 좀 이상한 점이 있다. 

나이가 문자열인 채로 출력되는 것이 문제임을 알고 나서 나는 단순히 출력 부분에 int()를 해주었다.

 

for age, name in members:
    print(int(age), name)

 

위와 같이 처리해주면 나이가 문자열인 상태에서 정수로 변환되어 출력될 것이기 때문에 정답처리 될 줄 알았다. 

하지만 오답이었다. 이건 왜 오답인지 아직도 잘 모르겠다.

정렬 처리를 문자열로 한 것이 문제였을까..?ㅎㅎ

 

결과적으로 회원 정보를 for 루프에서 입력 받을 때, int() 처리를 해주면 문제없이 정답으로 처리된다.

 


 

2. 풀이

 

# 나이순 정렬
import sys
input = sys.stdin.readline

n = int(input())

members = []

for _ in range(n):
    age, name = input().split()
    members.append([int(age), name])

members.sort(key=lambda x: x[0])

for age, name in members:
    print(age, name)

 

항상 타입을 잘 체크하자!