숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 한 장을 뽑는 게임이다.
단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다.
1. 숫자가 쓰인 카드들이 N X M 형태로 놓여 있다. 이 때, N은 행의 개수, M은 열의 갯수를 의미함.
2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택함.
3. 그 다음, 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다.
4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다.
(예시 생략)
각 행에 속해있는 열 원소들 중, 가장 최소의 값을 가지는 원소를 뽑은 다음, 각 행에서 뽑혀진 원소들 끼리 비교해 가장 큰 원소를 뽑아낸다.
n, m = map(int, input().split())
global_max = -1
for i in range(n):
row_arr = list(map(int, input().split()))
local_min = 999999
for j in range(m):
if(local_min > row_arr[j]):
local_min = row_arr[j]
if global_max < local_min:
global_max = local_min
print(global_max)
max의 초기 값은 -1, min의 초기값은 999999로 설정한다. 항상 초기 값을 설정할 때는, 문제에서 제시한 입력 범위를 생각하도록 하자.
굳이 2차원 배열을 동적할당해서 문제를 해결할 필요가 없음에도 불구하고, 처음에 2차원 배열을 동적할당하려고 시도해서 시간을 낭비했다.
행의 최솟값을 구할 때, row_arr
의 인덱스 변수를 잘못 주어서 (j가 들어가야할 곳에 i로) 오류가 났었다. 앞으로 주의하기 보다는 로직을 잘 짰다고 생각했음에도 불구하고 코드가 의도한대로 돌아가지 않은 경우에는 항상 체크해보자.