https://www.acmicpc.net/problem/11557
문제를 풀면서 몰랐던 개념
- 이중 반복문 안에서 입력 받은 값들을 각기 다른 리스트에 저장하는 방법
: 빈 리스트를 선언할 때 항상 전역 변수로만 선언했었는데, 첫 번째 반복문의 횟수만큼 두 번째 반복문이 돌아갈 때마다 리스트를 생성하려면 for 문 내에 선언해야 한다는 것을 알게 되었다.
for _ in range(T):
arr = [] # 이거!!!
N = int(input())
for i in range(N):
S,L = input().split()
L = int(L)
arr.append([L, S])
문제의 접근 방법
- 학교 별 술 소비량을 어떻게 따로 리스트에 저장할 지 고민하기
- 2차원 배열의 정렬 방법 생각하기
- 중첩 for문
- 한 줄에 공백을 두고 입력되는 값이 문자와 숫자 두 가지라는 사실 유념하기
내가 막혔던 부분
- 중첩 반복문 안에서 새로운 for 문이 돌 때마다 새롭게 리스트를 구성해서(나눠서) 추가하는 방법
문제 풀이 방법
(1) 테스트 케이스 T 값 입력받기
(2) T번만큼 입력받을 학교의 숫자 N개 입력 받기 (이 때, 다음 반복문에서 입력받게 될 학교이름과 술 소비량을 저장할 빈 리스트 arr 선언).
(3) N번만큼 학교이름(S), 술 소비량(L) 입력 받고, L은 정수이기 때문에 int로 형변환 시켜주기
(4) 앞에서 선언해주었던 리스트 arr에 S와 L의 순서를 바꿔서 추가 (정렬을 위해서).
(5) 리스트 arr 를 내림차순으로 정렬
(6) 이 정렬된 리스트들(N번만큼 입력되는 S,L을 저장한 arr)을 빈 리스트 alist에 추가하기 -> 3차원 배열 생성
(7) 이미 정렬된 리스트들이기 때문에 반복문을 돌려서 i번째 인덱스들 중 가장 앞에 있는 값의 두번째 요소를 출력.
소스코드
T = int(input()) # Test Case
alist = []
for _ in range(T):
arr = []
N = int(input())
for _ in range(N):
S,L = input().split()
L = int(L)
arr.append([L, S])
arr.sort(reverse=True)
alist.append(arr)
[print(alist[i][0][1]) for i in range(len(alist))]
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 이장님 초대 : 9237번 - Python (0) | 2022.06.04 |
---|---|
[백준] 사과나무 : 19539번 - Python (0) | 2022.06.03 |
[백준] 방탈출 : 15729번 - Python (0) | 2022.06.01 |
[백준] 거스름돈 : 14916번 - Python (0) | 2021.10.07 |
[백준] 포인트 카드 : 14471번 - Python (0) | 2021.10.04 |