본문 바로가기

프로그래밍/BOJ_Python 목표는 Diamond

[2566 | Python] 최댓값

 

🎉문제 총평

ez~

 

옛날이었으면 이정도에도 어버버 했을텐데! 그래도 성장하긴 했던거구나 나자신...기특해...


 

🎉조건

 

 

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
문제
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

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

 

🎉접근방식

for문을 사용해서 9*9 행렬을 제작한다

for문에서 각각의 요소들의 최댓값을 비교한다?


🎉try1: solved!😍

# 2566
lst = []
max_value = 0


# 행마다 입력하고 각 행의 최댓값을 찾음
for i in range(9):
    new_list = list(map(int, input().split()))
    new_max = max(new_list)

# 기존의 최댓값보다 새로운 행의 최댓값이 더 큰 값일경우 값을 변경
    if max_value <= new_max:
        max_value = new_max
        max_row = i + 1
        max_col = new_list.index(new_max) + 1


print(max_value)
print(max_row, max_col)

한번만에 해결!

O(N)이기에 더 간결한 코드가 있는지 찾아보았다.

 

대부분 이중 for문을 사용하고 있는데 시간복잡도가 늘어나긴 하지만 클린코드 관점에서는 더 좋은 것 같다.

# 2566 slv

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_num = table[row][col]
            max_row = row + 1
            max_col = col + 1

print(max_num)
print(max_row, max_col)
 

[BOJ/백준] 2566번 최댓값 - Python/파이썬 [해설/풀이]

[BOJ/백준] 2566번 최댓값 - Python/파이썬 [해설/풀이]

velog.io