본문 바로가기

백준

[BaekJoon/Python3] 백준 2566번 : 최댓값

 

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

 

 

 

[아이디어]

# 9x9 2차원 배열 만들어 놓기
# 배열 만들어 놓은거에 입력 받기
# 배열 돌면서 최댓값 찾기
# 최댓값의 위치 출력하기

 

 

[첫번째 풀이]

# 2차원 배열 선언
array = [[0 for col in range(9)] for row in range(9)]

# 2차원 배열 입력받기
for i in range(9):
    array[i] = list(map(int, input().split()))


# max_data = max(array)
# print(max_data)

# 최댓값 찾기
max_data = max(map(max,array))
print(max_data)

 

- 최댓값을 찾기 위해 max()함수를 썼다. 근데 인덱스를 찾을려면 어차피 for문 사용해야 함

- 주석 처리해놓은 부분은 저렇게 max()함수를 사용하면 출력 결과가 [87, 42, 18, 78, 53, 45, 18, 84, 53] 이렇게 나온다.

☆ 따라서 2차원 배열에서 max()나 min()함수 사용하고 싶으면 map()함수 이용해서 사용해야함!

 

 

[정답 풀이]

# 2차원 배열 선언
array = [[0 for col in range(9)] for row in range(9)]

# 2차원 배열 입력받기
for i in range(9):
    array[i] = list(map(int, input().split()))

# 최댓값과 그 값의 위치 찾기
max_num = 0
max_row, max_col = 0, 0

for row in range(9):
    for col in range(9):
        if max_num <= array[row][col]:
            max_row, max_col = row+1, col+1
            max_num = array[row][col]
print(max_num)
print(max_row, max_col)

 

 

- 2차원 배열 입력 받기 : 각 줄에 9개의 숫자를 입력 받아 2차원 배열 'array'에 저장

- 이중 for문을 사용하여 배열 순회

- 현재 값 'array[row][col]'이 'max_num'보다 크거나 같으면 최댓값 갱신

- 'max_num'을 현재 값으로 갱신하고, 위치 'max_row'와 'max_col'을 현재 인덱스로 갱신

- 위치 인덱스는 0부터 시작하므로 1을 더하여 출력해야함

 

☆ 2차원 배열 선언하고 입력 받기

☆ 이중 for문을 사용하여 2차원 배열 순회하기

 

 

 

[map()]

- iterable을 받아서, 각 요소에 함수를 적용해주는 함수이다.

- map(적용시킬함수, 적용할 요소들)

- 출력 결과는 iterator이기 때문에 보통 list 타입으로 형 변환해서 사용한다

- 예제

arr = [1, 2, 3, 4]

print(list(map(str, arr)))	# ['1', '2', '3', '4']

 

→ int형 데이터로 이루어져 있던 arr를 map()을 이용하여 모두 str형으로 바꿨다.