[백준 / BOJ] 2566번 최댓값 (Python)◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2024. 3. 15. 17:17
Table of Contents
반응형
문제 링크 : 2566번: 최댓값 (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
는 0row
는3 23 85 34 17 74 25 52 65
가 된다.
for j, val in enumerate(row)))
앞선 row
를 통해, j
가 열 번호가 되고 val
이 최댓값 그 자체가 된다.
에를 들어 앞선 row
인 3 23 85 34 17 74 25 52 65
에서 각각
j
는0 ~ 8
val
은3 ~ 65
이제 이렇게 만들어진 데이터들이 하나씩 (val, (i, j))
로 들어가고, max
메서드가 val
을 기준으로 최댓값을 추출해 각각 maxNum
, matrix
에 들어가게 된다.
그래서 최댓값과 인덱스를 동시에 찾을 수 있는.. 굳이 이렇게 해야 하나 싶긴 하다.
부록
참고문헌
반응형
'◎ 자료구조와 알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 / BOJ] 18870번 좌표 압축 (Python C++) (0) | 2024.03.17 |
---|---|
[백준 / BOJ] 2563번 색종이 (Python) (0) | 2024.03.16 |
[백준 / BOJ] 25206번 너의 평점은 (Python) (4) | 2024.03.14 |
[백준 / BOJ] 10998번 팰린드롬인지 확인하기 (Python) (0) | 2024.03.13 |
[백준 / BOJ] 2444번 별 찍기 - 7 (Python) (0) | 2024.03.12 |
@Reo :: 코드 아카이브
자기계발 블로그