서론
지난 포스팅에서는 백준 1316을 풀어보았다. 해당 포스팅이 궁금하다면 여기로 가면 된다. 이번에는 그거보다는 쉬운 백준 2566 문제를 풀어보고자 한다. 브론즈3에 해당한다. 이번 포스팅 역시 지난 포스팅과 같이 처음에는 문제에 대한 설명과 접근 방식을 얘기하고, 이후에는 접근 방식을 구현한 코드를 작성할 예정이다.
백준 2566 풀이 과정
9*9 격자판에 0 혹은 자연수가 등장한다고 한다. 최댓값을 찾고 몇 행 몇 열에 위치한 수 인지 구하라고 한다. 딱 문제를 보자마자 든 생각은 최대값을 업데이트해주면서, 갱신될 때마다 해당 행, 열을 따로 저장하면 된다는 생각이다. 인풋의 꼬라지를 보면,
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
이렇게 되어 있는데 이 전체를 2d 행렬로 만든 뒤 훑는다는 것이 정석으로 보이지만, 딱 보자마자 최대값을 업데이트 할 수 있다고 판단했다. 그래서 한 줄 한 줄 받으며 최대값을 훑으면서 동시에 위치까지 업데이트 하는 방식으로 하려고 한다. 어떻게 했냐면 1. 한 줄 받고 arr 리스트로 만들었다. 이 때 총 9*9 행렬임이 주어졌기 때문에 for i in range(9)에서 i가 행을 의미한다. 한 줄 = 행인것이고 그 행의 위치를 i가 나타내는 것이다. 2. 열을 알아내기 위해서 또 for물을 돈다 for j in range(9)를 하는데 여기서는 j가 열을 의미한다. 3. 현재 있는 최대값(= res_num)보다 큰 값을 찾으면 그 때 최대값을 업데이트하고 그 위치 (i,j) 역시 업데이트 한다. 4. i,j의 인덱스는 0부터 시작하기 때문에 출력할 때는 +1을 해서 출력한다.
BOJ2566 코드
res_num, res_col, res_row = 0, 0, 0
for i in range(9): # i 는 행
arr = list(map(int, input().split()))
for j in range(9): # j는 열
if arr[j] >= res_num:
res_num = arr[j]
res_col = j
res_row = i
print(res_num)
print(res_row+1,res_col+1)
'IT, Computer' 카테고리의 다른 글
[백준] BOJ 12865, 평범한 배낭 파이썬 Python (0) | 2025.02.07 |
---|---|
[백준] BOJ1463, 1로 만들기 (0) | 2025.02.05 |
[백준] BOJ1316, 그룹 단어 체커 (0) | 2025.01.13 |
리스트 컴프리헨션 List Comprehension (0) | 2025.01.10 |
Retrieval Augmented Generation(RAG) 복습 (6) 사전을 사용해서 질문 바꾸기 (2) | 2024.12.05 |