문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

 1열2열3열4열5열6열7열8열9열1행2행3행4행5행6행7행8행9행
3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

 

 

 

이 문제 솔직히 행렬적으로 안 풀어도 된다고 생각해서 

large_dict = {}

for i in range(1,10):
    num_list = list(map(int, input().split(" ")))
    value = max(num_list)
    key = num_list.index(value)
    large_dict[key] = value

rev_large_dict = dict(map(reversed, large_dict.items()))
l = list(rev_large_dict.keys())
print(max(l))
print(l.index(max(l))+1,rev_large_dict[max(rev_large_dict)]+1)

 

 이렇게 이중반복문 안쓰고 풀었다가 틀렸다.

근데 이렇게해도 출력값이랑 같게 나오는데..

아마 문제에서 요구하는 이중반복문을 쓰지 않아서 틀린 것 같다.

(혹시 아시는 분 있다면 알려주시면 감사드리겠습니다!)

 

그래서 정답은 이것이다. 

all_list = []

for i in range(9):
    num_list = list(map(int, input().split()))
    all_list.append(num_list)

result = all_list[0][0]
row = 0
column = 0
for x in range(9):
    for y in range(9):
        if all_list[x][y] > result:
            result = all_list[x][y]
            row = x
            column = y
            
print(result)
print(row+1, column+1)

 

처음에 제일 마지막 코드를 print(x, y)로 했는데

8,8 이렇게 나와서 당황했는데 

이렇게 나오는 게 당연한게 반복문을 다 돌은 값을 내가 출력했기 때문에 저렇게 나오는게 당연했다.

 

그래서 처음에 row = 0 / column = 0이라고 설정해놓고 최댓값이 나오면 그것의 행과 열의 번호를 기억하도록 시켰다.

그러니 정답이였다. 

 

행렬은 무조건은 아니지만 이중반복문을 권장해서 쓰도록 하자 흠흠 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2563  (0) 2024.01.24
백준 파이썬 - 10798  (0) 2024.01.19
백준 파이썬 - 2738  (2) 2024.01.18
백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18

+ Recent posts