미소를뿌리는감자의 코딩

[백준 2024/02/22] 10814번 나이순 정렬 본문

코딩 테스트/백준

[백준 2024/02/22] 10814번 나이순 정렬

미뿌감 2024. 2. 22. 13:41
728x90

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

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 

1. 접근 방법

client에 대한 정보들을 순서대로 입력을 받은 후, 나이를 기준으로 정렬하면 된다.

나이가 같을 경우, 가입한 순으로 출력하는 조건에 대해서는 딱히 신경을 써주지 않아도, 가입한 순으로 list에 넣었기 때문에 괜찮다.

 

하지만 신경이 조금 쓰이다면 

unsorted_list = []
for i in range(int(input())):
    unsorted_list.append(list(input().split()+[i]))

unsorted_list.sort(key=lambda x: (int(x[0]), x[2]))

for age, name, i in unsorted_list:
    print("{} {}" .format(age, name))

 

이런식으로 입력 받을 때, 저장해 두었던 순서를 이용해서, key의 두 번째 조건으로 넣어두어도 좋다.

 

하나 더 유의할 점은, int(x[0]) 을 해주어야 한다는 점이다. 

만약 한 자리수라면, 별로 결과에 영향을 주지 않을 수 있어도 문자열인 '10 '9'를 비교하게 된다면 '9'가 더 뒤에 출력될 것이기 때문이다.

아래 코드로 확인할 수 있다.

test_list = ['10', '9']
test_list.sort()
print(test_list)

## 출력: ['10', '9']

 

1과 9를 먼저 비교했을 때, 1이 작다고 판단, 바로 10을 9 보다 앞에 두게 된다.

 

* 따라서 항상 수를 비교해서 sort()를 하고자 할 때, 숫자로 형변환이 완료 되었는지 꼭 확인해야 한다.

 

2. 코드

def input_client(unsorted_list):
    for i in range(int(input())):
        unsorted_list.append(list(input().split()))


def sort_client(unsorted_list):
    unsorted_list.sort(key=lambda x: int(x[0]))


def print_client(sorted_list):
    for client in sorted_list:
        print(' '.join(client))


def main():
    unsorted_list = []
    input_client(unsorted_list)
    sort_client(unsorted_list)
    print_client(unsorted_list)


if __name__ == '__main__':
    main()
728x90