문제
https://www.acmicpc.net/problem/2693
코드
- 2차원 배열 사용
cnt = int(input()) #테스트 케이스 개수
N = 3 #N번째로 큰 수
arr = [list(map(int,(input().split()))) for k in range(cnt)]
#1줄 for문 이용, 테스트 케이스만큼 값을 입력받아 list로 큰 리스트에 저장
for i in range(len(arr)): #N번째로 큰 값 출력
arr[i].sort(reverse=True)
print(arr[i][N-1])
풀이
먼저 테스트 케이스의 개수가 주어지고, 개수만큼 테스트 케이스 배열을 입력받는다.
→ 입력받은 값을 split()으로 나눠준 뒤, map을 이용해 각 함수를 int형 변환 해주고, list로 저장한다.
map(함수, iterable) : iterable의 요소를 지정된 함수로 처리해주는 함수
- 원본을 변경하지 않고 새 맵 객체 생성 → 안에 들어있는 값 볼 수 없음 [<map object at 0x7f4c300e8d10>]
⁂ list()를 이용해 출력해서 확인해야 함
✓ 이때 맵 객체는 iterator → 변수 여러 개에 저장하는 언패킹 가능
- arr : 리스트로 변환된 테스트 케이스들을 요소로 저장할 상위리스트.
- 따라서 arr은 2차원 배열이 된다.
- 배열 arr이 다 채워지면, for문을 통해 리스트 1개씩 내림차순 정렬 뒤 N번째로 큰 수 출력함
- "리스트 명".sort() : "list명".sort()로 사용. 오름차순으로 정렬함. 본체 자체를 변형. 반환X
- sort(reverse=True) == desc
- sorted("리스트 명") : 본체 변형X, 정렬된 리스트를 "반환"함
- "리스트 명".sort() : "list명".sort()로 사용. 오름차순으로 정렬함. 본체 자체를 변형. 반환X
다른 풀이
cnt = int(input())
N = 3
for i in range(cnt):
num = list(map(int,input().split())) #입력받은 값 리스트 변환
num.sort(reverse=True) #내림차순 정렬
print(num[N-1]) #N번째로 큰 수 출력
- 입력과 출력이 번갈아가며 되어도 통과되는 것 같다. 안되는 줄 알았는데...
- 만약 입력과 출력을 한번에 할 수 있으면 for문이 1번으로 충분하다.
백준은 입력과 출력 맞추는게 제일 어려운 것 같다... 그것땜에 몇번을 틀렸는지...
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 2460번_ 지능형 기차 2 (0) | 2022.07.26 |
---|---|
[Python] 백준 10818번_ 최소, 최대 (0) | 2022.07.26 |
[Python] 백준 3460번_ 이진수 (0) | 2022.07.26 |
[Python] 백준 1978번_ 소수 찾기 (0) | 2022.07.24 |
[Python] 백준 2501번_약수 구하기 (0) | 2022.07.21 |