문제
https://www.acmicpc.net/status?user_id=daum4572&problem_id=10814&from_mine=1
"""
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어짐.
회원들의 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬.
"""
수정 전 코드
import sys
input = sys.stdin.readline
class Solution():
def ageSort(self):
N = int(input().rstrip())
judge = list()
for i in range(N):
age, name = input().rstrip().split(" ")
judge.append((int(age), name))
judge.sort()
for j in range(N):
print(judge[j])
a = Solution()
a.ageSort()
수정할 점
1. 정렬
파이썬은 기본적으로 sort() 함수나 sorted() 함수를 사용하여 정렬을 수행한다. 두 함수 모두 'key'를 인자로 사용하여 정렬 기준을 지정할 수 있다. 튜플을 가진 리스트를 정렬하는 경우 기본적으로 첫 번째 요소를 기준으로 정렬하고, 첫 번째 요소가 같을 경우 두 번째 요소를 기준으로 정렬한다.
그러나, 현재 문제에서 요구하는 정렬은 첫 번째 요소를 기준으로 정렬하되, 첫 번째 요소가 같을 경우 judge에 가입한 순서를 기준으로 정렬해야 한다.
judge.sort()
위의 sort() 함수는 일반적으로 judge 리스트의 요소를 오름차순으로 정렬하도록 하는데,
이 때, judge 리스트의 각 요소가 튜플일 경우, 튜플의 가장 첫 번째 요소를 기준으로 정렬하고, 첫 번째 요소의 값이 동일할 경우, 두 번째 요소를 기준으로 정렬하는 형식이다.
이는 문제의 요구사항과 맞지 않으므로 수정해보자!
judge.sort(key=lambda x: x[0])
익명 함수를 사용하여 위 코드 처럼 각 요소(x)의 첫 번째 요소(x[0])만을 기준으로 오름차순 정렬을 해주어,
문제의 요구사항에 맞게 두 번째 요소에 대한 정렬을 하지 않고 첫 번째 요소 이외의 요소들은 입력한 순서와 동일하게 그대로 정렬된다.
2. 출력 형식
현재 코드는 리스트를 생성하여 age와 name을 출력한다.
그러나 출력 부분에서 각 요소를 튜플 그대로 출력하는 방식을 사용하고 있다.
이는, 문제 요구에 맞지 않다. 문제의 출력 형식은 튜플이 아닌 두 값 사이에 공백을 두고 한 줄에 하나의 쌍을 출력하는 것이다.
3. 값 형식
코드를 수정하는 과정에서 age의 값 타입을 int로 변환하지 않고 리스트에 저장하였더니 에러가 났다.
이를 원래대로 int 형으로 바꿔주었다.
수정된 코드
"""
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어짐.
회원들의 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬.
"""
import sys
input = sys.stdin.readline
class Solution():
def ageSort(self):
N = int(input().rstrip())
judge = list()
for i in range(N):
age, name = input().rstrip().split(" ")
judge.append([int(age), name])
"""
첫 번째 요소의 값이 같을 경우, 입력한 순서대로 두 번째 요소를 정렬하는 방법
"""
judge.sort(key=lambda x: x[0])
"""
출력 형식
"""
for age, name in judge:
print(age, name)
a = Solution()
a.ageSort()
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 17144번: 미세먼지 안녕! (1) | 2024.01.15 |
---|---|
[백준] 9095번: 1, 2, 3 더하기 (1) | 2024.01.11 |