https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
- 나이순 정렬
- 나이 같으면 등록순 정렬(입력순)
✔ 알고리즘
- 정렬
✔ 접근방법
1. 나이를 기준으로 정렬 해야 한다고 접근
2. 한 줄에 공백을 기준으로 여러 단어를 한 묶음으로 하여 여러줄 입력받는 것에서 헤맴
-> 처음엔 딕셔너리 형식으로 입력 받았으나 나이가 먼저 입력값으로 들어가면서 key값이 되고 나이가 중복되면서 제대로 저장X (input().split()의 반환 형태에 대해 잘 알지 못해 발생한 문제)
3. 2차원 리스트로 입력받고 sorted()/sort() 를 사용해 나이를 기준(key)으로 지정해 정렬
💡나이를 기준으로 정렬한다는 것은 정수를 기준으로 한다는 것이므로 반드시 int형으로 변환하여 정렬 기준으로 지정
✔ 코드
N = int(input())
mem = list(input().split() for _ in range(N))
#mem.sort(key=lambda x:int(x[0])) #value값->age을 기준으로 정렬
mem = sorted(mem,key=lambda x:int(x[0])) #int형으로 바꿔줘 숫자를 기준으로 정렬해야 정답
for j in mem:
print(j[0],j[1])
✔ 배운점/아쉬운점
1. input().split()을 하면 공백을 기준으로 문자가 잘려서 리스트로 저장 -> 반복문을 사용해 N번 반복하고 그 리스트들을 다시 list로 묶어 2차원 list를 만듬
2. 변수명.sort() vs sorted()
- 변수명.sort() : 기존 자료구조를 변경
- sorted() : 기존의 것은 변경X, 새로운 객체 반환
sorted(iterable한 객체, key = 정렬 기준) ex) sorted(mem, key=x:int(x[0])) => 리스트 mem에서 원소 하나씩 꺼내서 매개변수 x로 받고, x의 0번째 원소를 int형으로 바꾼 것을 기준으로 정렬
3. 여전히 입력값을 받는 것에서 함수의 return 값을 제대로 이해하지 못해 유연하게 사용X
'알고리즘 > 백준(BOJ) 문제 풀이' 카테고리의 다른 글
[Python]백준 #1018 체스판 다시 칠하기 (0) | 2022.07.03 |
---|---|
[Python]백준 #1259 팰린드롬수(class2+) (0) | 2022.03.13 |
[Python]백준 #11050 이항계수1(class2+) (0) | 2022.03.12 |
[Python]백준 #10250 ACM호텔(class2+) (0) | 2022.03.12 |
[Python] 백준 #1181 단어 정렬(class2+) (2) | 2022.03.10 |