https://www.acmicpc.net/problem/10814
📌 문제 탐색하기
- 시간 제한 3초
- 정수 n이 들어오고 n만큼 돌면서 나이와 이름 받기.
- 공백으로 받으니까 .spit()함수 쓰고 이차원 배열로 저장해야겠다.
- 나이를 기준으로 정렬하고 같은 수일 경우 먼저 입력된 값이 먼저 나오도록 하기.
📌 코드 설계하기
- n값 받기
- for문 n만큼 돌면서 arr에다가 나이랑 이름 split 해서 저장하기
- 최초 배열에다가 arr 추가
- 최초 배열의 [x][0]으로 정렬하기!
- 같은 수는 먼저 입력된게 알아서 나오지 않나.? (해봐야 알듯!)
📌 개념 정리
- 2차원 리스트 요소 출력하기
- 한 리스트에서 요소 두 개를 꺼내서 저장하기
- a = [[10, 20], [30, 40], [50, 60]] for x, y in a: print(x, y) 10 20 30 40 50 60
- for문 두 번 사용해서 출력하기
- a = [[10, 20], [30, 40], [50, 60]] for i in a: for j in i: print(j, end=' ') print() 10 20 30 40 50 60
- 배열 정렬하기
- 1차원 배열 정렬하기
b. 2차원 배열 정렬하기list = [5, 3, 4] list.sort() // list.sort(reverse=True) print(list) [3, 4, 5] // [5, 4, 3] * key 사용하기 list = ["one", "two", "three", "four"] list.sort(key=len) # len에 따라서 정렬된다. print(list) ['one', 'two', 'four', 'three']
- # 0번째 인덱스에 대해 오름차순 정리 list.sort(key=lambda x:x[0]) # 0번째 인덱스에 대해 오름차순 정리 후 1번째 인덱스에 대해 내림차순 정리 list.sort(key = lambda x: (x[0], -x[1]))
📌 시도 회차 수정 사항
- 1차
n = int(input())
judge = []
for i in range(n):
arr = list((input().split()))
judge.append(arr)
judge.sort(key=lambda x:x[0])
# print(judge)
for x, y in judge:
print(x, y)
혼자 테스트 케이스도 적어보고 실행해서 맞았는데도 백준에 제출하니 1%까지만 까고 틀렸다고 에러가 떴다. 뭐지…?
→ 오랜 고민 끝에 .. 내 코드는 문제가 없는데 왜지..? 하는 생각으로 구글링을 했다. 근데 이상한 점 발견. 다들 input을 받을 때
user_age, user_name = input().split()
이렇게 각각 받는 것이었다..! 아? 나는 list로 묶었는데..?! list로 묶으면 혹시 형변환되나./!? str으로???
그래서 출력을 해봤다.
<class 'str'>
20 Sunyoung
<class 'str'>
21 Junkyu
<class 'str'>
21 Dohyun
아… int가 아니라 str으로 들어갔구나..
- 2차
n = int(input())
judge = []
for i in range(n):
arr = list((input().split()))
judge.append(arr)
judge.sort(key=lambda x:x[0])
# print(judge)
for x, y in judge:
print(int(x), y)
근데도 틀렸다.
list로 묶으면 str으로 저장되니 x[0]을 기준으로 정렬할 때 숫자를 기준으로 정렬이 되는 것이 아니라 문자를 기준으로 정렬된다. 즉, 24, 3 중에 숫자 2가 더 빠르니 24가 먼저, 3이 나중에 출력되는 것이다. 그래서 .. 다시 형변환을 진행하였다.
드디어 성공!!
📌 정답 코드
n = int(input())
judge = []
for i in range(n):
arr = list((input().split()))
judge.append(arr)
judge.sort(key=lambda x:int(x[0]))
# print(judge)
for x, y in judge:
print(int(x), y)
'개발 > python' 카테고리의 다른 글
[백준 1181번] 단어 정렬 - python (3) | 2025.08.14 |
---|---|
[백준 1181번] 단어 정렬 - python (3) | 2025.08.13 |
[백준 2309번] 일곱 난쟁이 - python (1) | 2025.08.11 |
[백준 11659번] 구간 합 구하기 4 - python (0) | 2025.03.26 |
[알고리즘] 구간 합 알고리즘 (0) | 2025.03.26 |