2566번: 최댓값
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
www.acmicpc.net
문제
<그림 1>과 같이 9×9 격자판에 쓰인 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
입력
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
출력
첫째 줄에 최댓값을 출력하고, 둘째 줄에 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그중 한 곳의 위치를 출력한다.
정답코드
table = [list(map(int, input().split())) for _ in range(9)]
max_num = 0
max_row, max_col = 0, 0
for row in range(9):
for col in range(9):
if max_num <= table[row][col]:
max_row = row + 1
max_col = col + 1
max_num = table[row][col]
print(max_num)
print(max_row, max_col)
풀이
- 리스트 컴프리핸션으로 행렬을 입력받고,
- 초기 최댓값인 0을 저장한 max_num, 행과 열의 인덱스를 저장할 max_row 그리고 max_column을 초기화한다.
- 행렬의 각 요소를 순회하며 다음과 같은 검사를 진행한다:
- 만약 해당 수가 최댓값보다 크다면
- max_num을 해당 수로 초기화한다.
- 코드에는 없지만 만약 최댓값보다 크지 않다면 그냥 넘어간다.
- 그렇게 모든 행렬을 다 흝어보는 것이 끝나면
- 원하는 내용을 출력해준다.
느낀 점
내가 구현한 로직은 다음과 같다:
- 9 * 9 행렬을 만들기
- 그중 최댓값을 먼저 찾기
- 행렬을 순회하면서 최댓값과 비교하기
- 만약 최댓값이 나오면, 해당 값의 위치를 판별하기
num_list = [list(map(int, input().split())) for _ in range(9)]
max_value = max(max(row) for row in num_list)
for i, row in enumerate(num_list):
if max(row) == max_value: # if max_value in row:
max_index = (i * 9) + row.index(max(row))
row_position = max_index // len(num_list) + 1
column_position = max_index % len(num_list) + 1
print(max_value)
print(row_position, column_position)
풀이는 다음과 같다:
- 우선 사용자로부터 9줄에 걸쳐서 각 줄마다 숫자를 입력받아 2차원 리스트 num_list안에 저장한다.
- num_list의 각 행을 순회하며, 존재하는 값들의 최댓값을 찾는다.
- 각 행마다 구한 최댓값 중 가장 큰 수를 max_value 안에 넣는다.
num_list = [list(map(int, input().split())) for _ in range(9)]
max_value = max(max(row) for row in num_list)
이제 다시 한번 순회를 하며 각 값이 최댓값과 동일한지 알아보는데, 만약 같다면 해당 위치를 기반으로
우선 2차원 행렬의 인덱스를 1차원 인덱스로 축소하여 max_index안에 넣어준다.
max_index = (i * 9) + row.index(max(row))
9개의 행이 존재하므로 행은 max_index를 9로 나눈 몫이며, 인덱스는 0부터 시작하므로 1을 더해준다.
열은 max_index를 9로 나눈 나머지가 된다. 동일한 이유로 1을 더해준다.
마지막으로는 원하는 값을 출력한다.
'Algorithm > baekjoon' 카테고리의 다른 글
[백준] 17219번 비밀번호 찾기 파이썬 (python) (0) | 2024.03.24 |
---|---|
[백준] 1920번 수 찾기 파이썬 (python) (1) | 2024.03.24 |
[백준] 25206번 너의 평점은 파이썬 (python) (1) | 2024.03.20 |
[백준] 1316번 그룹 단어 체커 파이썬 (python) (2) | 2024.03.19 |
[백준] 2941번 크로아티아 알파벳 파이썬 (python) (5) | 2024.03.15 |
댓글