728x90
문제
문제 보러가기
2566번: 최댓값
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
www.acmicpc.net
입출력
입력 | 9x9크기로 이루어진 정수 행렬 |
출력 | 행렬에서 가장 큰 값. 가장 큰 값의 행 열. |
풀이
arr = [
list(map(int, input().split()))
for _ in range(9)
]
max_num=0
c, r = 0, 0
for i in range(9):
for j in range(9):
if max_num<=arr[i][j]:
max_num = arr[i][j]
c = i+1
r = j+1
print(max_num)
print(c,r)
1) 9x9 크기의 행렬을 입력 받는다.
2) 가장 큰 값 max_num을 0으로 초기화한다.
2.1) 2중 for문을 사용해 행렬중 가장 큰 값과 위치를 찾는다.
2.1.1) 가장 큰 값은 현재 행렬 위치의 값과 가장 큰 값을 비교하고 둘 중에 더 큰 수를 max_num에 저장한다.
2.1.2) max_num에 저장한 값의 위치를 행, 열로 저장한다.
⚠ 본 문제의 경우 출력에서 '최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.'라고 기재되어있다.
그래서 먼저나오나 나중에 나오나 상관 없이 하나를 출력하면 된다고 생각했다. 하지만 코드 작성후 오답으로 나와 테스트해보니 두 개 이상인 경우 마지막에 나오는 값의 위치를 출력해야한다.
처음에는 max_num < arr[i][j]
로 작성해서 오답이 나왔다. (여러개 인 경우 처음 위치 출력)
max_num <= arr[i][j]
로 수정하니 정답으로 되었다. (여러개인 경우 마지막 위치 출력)
map을 사용한 풀이
arr = [
list(map(int, input().split()))
for _ in range(9)
]
max_num = max(map(max, arr))
c, r = 0, 0
for i in range(9):
for j in range(9):
if arr[i][j]==max_num:
c = i
r = j
print(max_num)
map을 사용하면 2차원 배열의 최대값을 찾을 수 있다.
배열을 탐색하기 전 최대값을 알면 탐색에서는 최대값의 위치만 찾으면 된다.
Reference
728x90
'CODING TEST > Beakjoon' 카테고리의 다른 글
[백준 / python / 10798] 세로읽기 (1) | 2023.10.24 |
---|---|
[백준 / python / 2563] 색종이 (0) | 2023.10.22 |
[백준 / 5622 / python] 다이얼 (0) | 2023.10.16 |
[백준 / 10809 / python] 알파벳 찾기 (0) | 2023.10.14 |
[백준 / 2675 / python] 문자열 반복 (2) | 2023.10.14 |