방명록
- [알고리즘][파이썬] 백준_10814_나이순 정렬2021년 12월 25일 15시 44분 04초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
https://www.acmicpc.net/problem/10814
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반응형'CS > 코딩 테스트' 카테고리의 다른 글
[알고리즘][파이썬] 백준_10828_스택 (0) 2021.12.27 [알고리즘][파이썬] 백준_18870_좌표 압축 (0) 2021.12.26 [알고리즘][파이썬] 백준_1181_단어 정렬 (0) 2021.12.24 [알고리즘][파이썬] 백준_11651_좌표 정렬하기 2 (0) 2021.12.23 [알고리즘][파이썬] 백준_11650_좌표 정렬하기 (0) 2021.12.20 다음글이 없습니다.이전글이 없습니다.댓글