백준 10814

Byeonghyeon Kim·2021년 2월 17일
0

알고리즘문제

목록 보기
10/93
post-thumbnail

링크

백준 10814

나이순 정렬


요새 알고리즘 수업을 들으며 내장함수를 봉인하고 알고리즘 문제를 계속 풀었더니 이문제도 그렇게 풀고 싶었다. 그러나 내 역량부족인건지 불가능 하고 결국 함수를 사용해서 풀었다.


오답 1

import sys

ages = []
names = []
ans = []
n = int(input())
for _ in range(n):
    age, name = sys.stdin.readline().split()
    ages.append(int(age))
    names.append(name)

for i in range(n-1):
    for j in range(n-2, -1 + i, -1):
        if ages[j] > ages[j+1]:
            ages[j], ages[j+1] = ages[j+1], ages[j]
            names[j], names[j+1] = names[j+1], names[j]

for k in range(n):
    ans.append(str(ages[k]) + ' ' + names[k])

print('\n'.join(ans))

요소를 각각 리스트로 받아서 작은게 가라앉도록 버블소트를 해서 정렬시켰다. 파이참에서는 정상작동했으나 백준에선 시간초과로 통과하지 못했다.


오답 2

import sys

dic = {}
n = int(input())
for _ in range(n):
    age, name = sys.stdin.readline().split()
    dic[name] = age

sortdic = sorted(dic.items(), key = lambda x : x[1])

print(sortdic)

for i in range(n):
    print(sortdic[i][1] + ' ' +sortdic[i][0])

딕셔너리로 받아서 sorted와 lambda를 활용해 나이를 기준으로 정렬시킨 후 프린트 했다.
백준에선 런타임 에러가 떴다. 분명 파이참에서 테스트 케이스는 성공했는데..
파이참에서 입력을 늘려서 테스트 해보니 이유는 모르겠으나 입력이 많이들어가면 자꾸 하나씩 정렬이 되지 않았다.


정답 코드

import sys

ans = []
n = int(input())
for _ in range(n):
    age, name = sys.stdin.readline().split()
    ans.append([age, name])
ans.sort(key = lambda x : int(x[0]))

for i in range(n):
    print(ans[i][0], ans[i][1])

마지막으로 그냥 2차원 리스트로 구현했다. 리스트로 구현 후 sort와 lambda를 활용해 정렬했다. 드디어 정상작동


알게된 것👨‍💻

  • 왜 sorted는 안되고 sort는 된걸까.. 공부가 필요하다.
profile
자기 주도 개발전 (개발, 발전)

1개의 댓글

comment-user-thumbnail
2021년 2월 17일

오답 2 코드에서 중간의 print만 지워서 제출해보니 indexerror 나오네요. 인덱스 쪽에 집중해서 찾아보시면 답을 찾으실 수 있지 않을까 싶습니다!

답글 달기