Dandy Now!
  • [알고리즘][파이썬] 백준_10814_나이순 정렬
    2021년 12월 25일 15시 44분 04초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

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

     

    10814번: 나이순 정렬

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

    www.acmicpc.net

    N명의 회원을 정렬해야 한다.

    나이순으로 정렬하고,

    나이가 같으면 먼저 입력된 순으로 정렬한다.


    1차 시도(틀렸습니다)

    # 1차 시도(결과: 틀렸습니다)
    import sys
    N = int(sys.stdin.readline())
    
    ipt = []
    id = 0 # 나이가 같을 경우 기준으로 삼을 가입순서 id를 부여했다.
    for i in range(N):
        ipt.append(sys.stdin.readline().split())
        ipt[i].insert(1, id) # ipt 리스트의 1번 주소에 가입순서 id를 넣었다.
        id += 1
    
    ipt.sort()
    
    for i in ipt:
        print(i[0], i[2])

     

    리스트 함수 sort가 ipt 리스트의 0번 주소의 나이 값을 가장 먼저 비교하고,

    두번째로 id 값을 비교하여

    정렬하도록 하였다.

    예제와 동일하게 입력과 출력이 되어 당연히 맞춘 줄 알았으나 결과는

    "틀렸습니다"

    원인은 나이값의 자료형이 문자열이었기 때문이다.


    제출 코드 1(맞았습니다)

    # 나이 값을 정수형으로 변경(결과: 맞았습니다!)
    import sys
    N = int(sys.stdin.readline())
    
    ipt = []
    id = 0
    for i in range(N):
        ipt.append(sys.stdin.readline().split())
        ipt[i][0] = int(ipt[i][0]) # 나이 값을 정수형으로 변경
        ipt[i].insert(1, id)
        id += 1
    
    ipt.sort()
    
    for i in ipt:
        print(i[0], i[2])

     

    ipt 리스트에서 나이 값을 정수형으로 변경하여 문제를 해결하였다.


    제출 코드 2(맞았습니다)

    # 나이 값만 비교하여 정렬(결과: 맞았습니다!)
    import sys
    N = int(sys.stdin.readline())
    
    ipt = []
    for i in range(N):
        ipt.append(sys.stdin.readline().split())
        ipt[i][0] = int(ipt[i][0])
    
    ipt.sort(key = lambda x:x[0]) # 나이 값(ipt리스트의 0번 주소)만 비교하여 정렬하였다.
    
    for i in ipt:
        print(i[0], i[1])

     

    sort 함수에서 특정 주소만 비교할 수 있지 않을까 하는 생각이 들었다.

    그렇다면 ipt리스트에 입력 순서를 기록하는 임의의 id값을 넣지 않아도 된다.

    구글링하여 sort 함수의 코드를 수정하였다.

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

     

    728x90
    반응형
    댓글