✏️ 문제
https://www.acmicpc.net/problem/2566
2566번: 최댓값
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
www.acmicpc.net
✏️ 풀이방법
1. max함수를 통해서 그래프의 최댓값 찾기
2. 2중 반복문을 통해서 최댓값 원소의 위치 찾기
📌 코드
graph = []
for _ in range(9):
graph.append(list(map(int,input().split())))
#map함수 사용
max_value = max(map(max,graph))
for i in range(len(graph)):
for j in range(9):
if graph[i][j] == max_value:
row,col = i,j
print(max_value)
print(row+1,col+1) #인덱스는 0부터 시작, 문제는 (1,1)에서 시작했기 때문에 +1
📌 결과
# 입력
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
🤔 시행착오.1
graph = []
for _ in range(9):
graph.append(list(map(int,input().split())))
max_value = max(graph)
for i in range(len(graph)):
for j in range(9):
if graph[i][j] == max_value:
row,col = i,j
print(max_value)
print(row+1,col+1) #인덱스는 0부터 시작, 문제는 (1,1)에서 시작했기 때문
Traceback (most recent call last):
File "C:\Users\\PycharmProjects\pythonProject\main.py", line 199, in <module>
print(row+1,col+1) #인덱스는 0부터 시작, 문제는 (1,1)에서 시작했기 때문
^
NameError: name 'row' is not defined
[87, 42, 18, 78, 53, 45, 18, 84, 53]
- max(graph)로 단순하게 큰 값 하나를 찾을 수 있을 거라 생각했는데 리스트의 인덱스 순서대로 가장 큰값을 찾아서 리스트를 출력한다.
리스트 안의 리스트의 0번째인덱스를 비교했을 때 87이 가장 큰 수 인데 인덱스0번째가 87인 리스트가 두개이니까 인덱스의 42와 13을 비교해서 max(graph)의 값이 [87, 42, 18, 78, 53, 45, 18, 84, 53]의 리스트가 출력된다.
- max_value값이 리스트가 되면 if문의 조건식이 성립하지 않아서 조건문이 실행되지 않아 row,col정의를 하지 못해서 row,col이 정의되지 않았다는 오류가 뜬다.
🤔 시행착오.2
graph = []
for _ in range(9):
graph.append(list(map(int,input().split())))
max_value = map(max,graph) #map함수 사용
for i in range(len(graph)):
for j in range(9):
if graph[i][j] == max_value:
row,col = i,j
print(max_value)
print(row+1,col+1)
Traceback (most recent call last):
File "C:\Users\\PycharmProjects\pythonProject\main.py", line 198, in <module>
print(row+1,col+1) #인덱스는 0부터 시작, 문제는 (1,1)에서 시작했기 때문
^
NameError: name 'row' is not defined
<map object at 0x000001FC1D27D3F0>
- max(graph)로 단순하게 큰 값 하나를 찾기에 map함수를 사용해서 graph안에서 max값을 찾도록 한다.
- map 함수는 이터레이터를 반환한다 그안에서 값을 꺼내서 담을 공간이 없어서 주소 값이 출력되었다.
- map 함수가 정확한 데이터타입으로 반환하지 않아서 2중 for문 안에 조건문이 실행되지 않았고, 그래서 row가 정의되지 않았다는 오류가 뜬다.
🔎 다른풀이
graph = []
for _ in range(9):
graph.append(list(map(int,input().split())))
max_value = 0
row = 0
col = 0
for i in range(9):
for j in range(9):
if graph[i][j] >= max_value:
max_value = graph[i][j]
row = i+1
col = j+1
print(max_value)
print(row, col)
1. max 함수가 아닌 최댓값을 max_value변수에 담으면서 반복문을 통해 최댓값을 찾는다.
2. 반복문을 통해 최댓값의 위치를 찾는다.
📝 메모
- map 함수에 대해 정확히 알아야할 것 같다.
- # print max함수는 int형에서 사용가능-> map함수 사용하면 가능이라는 오류를 적어놓은 것 같은데 푸는과정중 어디에서 이런 생각을 했었는지 기억이 안난다ㅠ
📒 다시보기
[Python] 11. 파이썬의 내장함수 map()
map() 함수 주어진 함수를 반복 가능한(iterable) 객체의 각 요소에 적용하여 그 결과를 새로운 이터레이터로 반환하는 함수 map(function, iterable) function : iterable(반복가능한)객체의 각 요소에 적용할
somin0416.tistory.com
'Python > online judge' 카테고리의 다른 글
백준 [25206.너의 평점은] | Python (0) | 2023.11.17 |
---|---|
백준 [2941.크로아티아 알파벳] | Python (0) | 2023.11.17 |
백준 [2563.색종이] | Python (0) | 2023.11.17 |
백준 [1157.단어 공부] | Python (0) | 2023.11.17 |
백준 [10798.세로읽기] | Python (0) | 2023.11.17 |