Python/online judge

백준 [2566.최댓값] | Python

구름솜:D 2023. 11. 17. 17:08
728x90

✏️ 문제

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