개발일기

백준 2566번 파이썬 풀이 : 최댓값 본문

알고리즘 문제풀이/백준

백준 2566번 파이썬 풀이 : 최댓값

한민기 2021. 10. 8. 22:08
반응형

문제 링크 : https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

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

www.acmicpc.net

<그림 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이다.

출력

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

 

# 문제 풀이

이 문제는 배열의 인덱스를 얼마나 유동적으로 사용할 수 있는지 확인할 수 있는 문제인 것 같다.

 

1
arr = [i for i in range(9)]
cs

 

이렇게 9개의 행을 먼저 생성해 둔 후 열을 한번에 입력 받는다.

 

1
2
3
4
answer = []
for i in range(9):
    arr[i] = list(map(int, input().split()))
    answer.append(max(arr[i]))
cs

 

list 형태로 열을 입력 받은 후에 각 열에 최대값을 answer 배열에 추가해 준다.

 

1
2
3
print(max(answer))
 
print(answer.index(max(answer)) + 1, arr[answer.index(max(answer))].index(max(answer)) + 1)
cs

후에 answer 배열에서 최대값을 출력하게 되면 9 * 9 에서 최대값을 출력하는 것과 동일하게 된다.

 

그 후에 행과 열은 배열.index 를 적절히 사용하여 출력하게 된다. 

여기서 프로그래밍은 배열이 0부터 시작하지만 문제는 1행 1열 부터 시작하기 때문에 행, 열 각각 1씩 더해준 값을 출력하면 된다.

 

# 전체 코드

1
2
3
4
5
6
7
8
9
arr = [i for i in range(9)]
answer = []
for i in range(9):
    arr[i] = list(map(int, input().split()))
    answer.append(max(arr[i]))
print(max(answer))
 
print(answer.index(max(answer)) + 1, arr[answer.index(max(answer))].index(max(answer)) + 1)
 
cs

 

반응형
Comments