출처: 2019 국가 교육기관 코딩 테스트
여러개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한장을 뽑아야한다. 하지만, 게임의 룰을 지키며 카드를 뽑아야하고, 룰은 다음과 같다.
숫자가 쓰인 카드들이 N * M 형태로 놓여 있다.
이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다.
먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다.
그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다.
따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다.
예를 들어 3 * 3 형태로 카드들이 다음과 같이 놓여 있다고 가정하자.
| 3 | 1 | 2 |
| 4 | 1 | 4 |
| 2 | 2 | 2 |
여기서 카드를 골라낼 행을 고를 때:
1
이다.1
이다.2
가 된다.따라서 이 예제에서는 세 번째 행을 선택하여 숫자 2
가 쓰여진 카드를 뽑는 것이 정답이다.
카드들이 (N \times M) 형태로 놓여 있을 때, 게임의 룰에 맞게 카드를 뽑는 프로그램을 작성하시오.
3 3
3 1 2
4 1 4
2 2 2
2
2 4
7 3 1 8
3 3 3 4
3
문제를 보고 각 행마다 가장 작은 수들을 뽑아내고, 해당 수 중에서 가장 큰 수를 출력시키면 된다고 생각하였다.
N, M = map(int, input().split())
max = 0
for i in range(N):
data = list(map(int, input().split()))
if max == 0:
max = min(data)
if min(data) > max:
max = min(data)
print(max)
N, M = map(int, input().split())
max_value = 0
for i in range(N):
data = list(map(int, input().split()))
max_value = max(max_value, min(data))
print(max_value)