

처음 문제를 봤을때 쉽게 풀고 넘어갈 줄 알았다. 하지만 틀려버렸다.
참 단순한 이유로 틀렸지만 기록해 둘 필요가 있을 것 같다.
1. 첫 번째 풀이(오답)
# 최댓값
field = []
for _ in range(9):
field.append(list(map(int, input().split())))
max_value = 0
row = 0
col = 0
for i in range(9):
for j in range(9):
if field[i][j] > max_value:
max_value = field[i][j]
row = i+1
col = j+1
print(max_value)
print(row, col)
언뜻 보면 큰 문제가 없어 보이지만 오답이다. 한참을 고민하다가 다른 분들의 코드를 여러 가지 찾아보니 이유를 알 수 있었다.
위의 문제를 다시 확인해 보면, 9 x 9 격자판에는 자연수와 0이 들어간다.
나의 코드는 격자판을 탐색하다가 0을 만나는 경우엔 0의 위치를 저장하지 못한다.
만약 모든 격자판의 값이 0이라면, 정확한 결과를 도출하지 못한다.
해결 방법
1. max_value를 -1로 초기화한다.
2. field[i][j] >= max_value로 변경한다.
2. 두 번째 풀이
# 최댓값
field = []
for _ in range(9):
field.append(list(map(int, input().split())))
# 값 하나씩 탐색하며 최댓값을 찾는다.
max_value = 0
row = 0
col = 0
for i in range(9):
for j in range(9):
if field[i][j] >= max_value:
max_value = field[i][j]
row = i+1
col = j+1
print(max_value)
print(row, col)
두 번째 해결책을 적용한 코드이다.
하지만 이 코드의 경우 같거나 큰 값을 만나면 바로 row, col 값이 변경된다. (무조건 나중에 탐색되는 값의 위치가 반환된다.)
이 문제의 경우 최댓값이 두 개 이상일 때 그중 어느 것의 위치를 반환하더라도 정답으로 인정되는 문제이지만,
가끔씩 행과 열의 값이 더 작은 것을 반환해야 한다든지 등등 ... 여러 개의 값 중에서 반환해야 하는 값의 조건이 더 붙는 경우가 있으므로 주의해야 한다.