2566: 최댓값 - Python

beaver.zip·2024년 2월 17일
0

baekjoon

목록 보기
49/56

https://www.acmicpc.net/problem/2566

문제

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

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

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

입력

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

출력

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

예제 입출력


풀이 1 (정답)

mat = []
max_val, max_row, max_col = 0, 0, 0

for _ in range(9): # 행렬 입력 받음
	row = list(map(int, input().split()))
	mat.append(row)

for row in range(9): # 행렬의 값에 순서대로 접근
	for col in range(9):
		if mat[row][col] > max_val: # 해당 행렬값이 최댓값인지 확인
			max_val = mat[row][col] # 최댓값 갱신
			max_row = row # 최댓값의 행 인덱스 갱신
			max_col = col # 최댓값의 열 인덱스 갱신

print(max_val) # 최댓값 출력
print(max_row+1, max_col+1) # 최댓값의 행, 열 출력 (인덱스+1)

넘 쉬워잉

풀이 2 (정답, 파이리썬님 코드)

max_num = 0

for i in range(9):
    row = list(map(int, input().split())) #굳이 행렬을 저장할 필요는 없다
    if max(row) > max_num:
        max_num = max(row) #최댓값
        x = i + 1 #행
        y = row.index(max_num) + 1 #열
print(max_num)
print(x,y)

천재적이다
난 당연히 행렬 저장 후 각 행과 열에 하나씩 접근하는 방식만 생각했는데
1. 저장을 안해도 되고
2. max, index 등 기본 함수를 적절히 사용한 게
정말 파이썬스러운 코드인 것 같다.

오늘의 교훈

  • 행렬 문제를 풀 때 굳이 행렬을 저장하지 않아도 되는 경우가 있다.
    아울러 어떤 문제를 풀 때든 틀에 박힌 형식적인 방법 보다는, 굳이 그 과정이 필요한가 생각해보고 창의적인 방법을 생각해서 풀어보자.
  • 기본 함수, 메소드를 적절히 사용해보도록 하자.
profile
mv blog velog.io/@beaver_zip

0개의 댓글