문제
여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다.
단, 아래 게임 룰을 지키며 카드를 뽑는다.
게임 룰
1. 숫자가 쓰인 카드들이 NxM 형태로 놓여 있다. 이 때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다.
2. 먼저 뽑고자 하는 카드가 포함돼 있는 행을 선택한다.
3. 그 행에 있는 카드 중 숫자가 가장 낮은 카드를 뽑는다.
입력 조건
1. 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 하여 각각 자연수로 주어진다. (1<=N, M<=100)
2. 둘째 줄부터 N개의 줄에 걸쳐 각 카드에 적힌 숫자가 주어진다. 각 숫자는 1 이상 10,000 이하의 자연수이다.
출력 조건
첫째 줄에 게임의 룰에 맞게 선택한 카드에 적힌 숫자를 출력한다.
내 코드
N,M = map(int,input().split())
dst = []
for _ in range(0,N):
input_line = list(map(int, input().split()))
dst.append(min(input_line))
print(max(dst))
해설 행을 기준으로 그룹을 지어주기 때문에, 그룹 별 최소값들을 비교해 그 중 제일 큰 수를 찾으면 된다고 생각했다. 따라서 행별로 입력을 받아 한 리스트에 저장하고, 그 중 최소값을 빈 배열에 넣어주었다. 입력받은 행의 횟수만큼 반복해주었다. 그 후 최소값들이 모인 배열에서 최대값을 출력하였다.
교재 코드
n,m = map(int,input().split())
result = 0
for i in range(n):
data = list(map(int,input().split()))
min_value = min(data)
result = max(result,min_value)
print(result)
n,m = map(int,input().split())
result = 0
for i in range(n):
data = list(map(int,input().split()))
min_value=10001
for a in data:
min_value = min(min_value,a)
result = max(result,min_value)
print(result)
교재해설 교재에서는 1. min()함수를 사용하는 방법 2. 2중 반복문 매핑을 이용하는 방법 두가지가 들어 있다. 전체적인 매커니즘은 유사하지만, 2번 코드에서는 초기값이 10001인 최소값과 입력받은 배열에서의 최소값을 비교하는 방식으로 문제를 해결하였다.
참고
이것이 코딩테스트다 with Python (나동빈 저)