◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이

[백준 / BOJ] 2566번 최댓값 (Python)

reo91004 2024. 3. 15. 17:17
반응형

문제 링크 : 2566번: 최댓값 (acmicpc.net)

 

2566번: 최댓값

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

www.acmicpc.net

 

🖥️ 시작하며

2차원 배열의 최댓값과 그 최댓값의 인덱스를 찾는 문제다.

아직도 C언어가 익숙한 나는 두 가지 방법으로 풀어보았다.

일반적인 방법

# 일반적인 방법, C언어 식
def findMaxIndex_C():
    maxNum = float("-inf")
    maxRow, maxCol = 0, 0

    for i in range(9):
        tempArr = list(map(int, input().split()))
        for j in range(9):
            if maxNum < tempArr[j]:
                maxNum = tempArr[j]
                maxRow, maxCol = i, j

    print(f"{maxNum}\n{maxRow + 1} {maxCol + 1}")


if __name__ == "__main__":
    findMaxIndex_C()

아무래도 가장 간단하고 쉽게 생각할 수 방법이지 않나 싶다.
배열을 한 줄씩 입력받아 그 배열 중에서 최댓값을 찾고, 이중 for문을 통해 바로바로 인덱스를 저장하는 방식이다.

 

파이썬다운..? 방법

# 파이썬다운 방법
def findMaxIndex_Python():
    inputArr = []
    maxNum = float("-inf")

    for _ in range(9):
        tempArr = list(map(int, input().split()))
        inputArr.append(tempArr)

    maxNum, matrix = max(
        ((val, (i, j)) for i, row in enumerate(inputArr) for j, val in enumerate(row))
    )

    print(f"{maxNum}\n{matrix[0] + 1} {matrix[1] + 1}")


if __name__ == "__main__":
    findMaxIndex_Python()

오히려 더 보기 힘들긴 하지만, 파이썬이기에 할 수 있는 방법이 뭐가 있을까? 하고 만들어보았다. 아마 퍼포먼스도 더 별로일 것 같다.

그래도 코드 설명을 해 보자면, 앞선 방법과는 다르게 배열을 모두 입력받아 2차원 배열을 완성시킨 후 시작한다.

maxNum, matrix = max(
        ((val, (i, j)) for i, row in enumerate(inputArr) for j, val in enumerate(row))
    )

이 코드가 핵심인데, 한번 하나씩 뜯어보자.

 

for i, row in enumerate(inputArr)

우선 이 코드를 통해 i에는 행 그 자체, row에는 행의 데이터가 들어간다.

예를 들어 처음에 3 23 85 34 17 74 25 52 65 데이터가 들어가면

  • i는 0
  • row3 23 85 34 17 74 25 52 65가 된다.

 

for j, val in enumerate(row)))

앞선 row를 통해, j가 열 번호가 되고 val이 최댓값 그 자체가 된다.

에를 들어 앞선 row3 23 85 34 17 74 25 52 65에서 각각

  • j0 ~ 8
  • val3 ~ 65

이제 이렇게 만들어진 데이터들이 하나씩 (val, (i, j))로 들어가고, max메서드가 val을 기준으로 최댓값을 추출해 각각 maxNum, matrix에 들어가게 된다.

그래서 최댓값과 인덱스를 동시에 찾을 수 있는.. 굳이 이렇게 해야 하나 싶긴 하다.

 

부록

참고문헌


반응형