문제
<그림 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 |