728x90
문제 설명
- 얼룩 덜룩한 색종이를 절반씩 잘라가며 한가지 색으로만 이뤄진 정사각형 모양의 색종이가 나올 때 까지 계속해서 자른 후 흰색과 파란색 색종이의 수를 각각 구하는 것
고민한 부분
- 반복문을 중첩해 풀이하려고 시도를 했으나 전체 종이의 크기에 따라 반복 횟수가 달라지기 때문에 반복문으로 풀이하는 것이 어렵다고 판단했다.
- 지금까지 공부한 내용 안에서 정해지지 않은 횟수의 중첩 반복문제를 해결하는 방법은 $^{1)}$재귀와 $^{2)}$그래프 탐색 알고리즘(BFS, DFS)가 있다.
- 문제를 분석해 보았을 때 DFS나 BFS로 탐색할 수 있는 그래프 형태로 만들 수 있는 방법을 떠올리지 못했다.
- 반복되는 부분을 찾아 재귀 함수로 문제를 구현하기로 생각했다.
- 나는 재귀 함수를 구현할 때는 종료 조건 코드를 먼저 작성하고 작업 내용을 나중에 작성하는 편이다.
- 종료 조건 : 도화지 크기가 1 or 도화지가 모두 같은 색으로 이뤄져있을 때
- 종료시 작업 : 색종이의 색에 따라 흰색, 파란색 도화지 수를 증가시킨다.
- 반복 작억 : 도화지를 4등분해 각각에 대해 함수를 반복한다.
- 재귀 함수의 argument를 결정하기 위해 그림을 그려 해결 과정을 한번 그려보았다.
- 시작 좌표가 (R,C)이고 도화지 한 변의 길이가 L일 때, 종료 조건을 확인하고 종료 조건을 만족시키지 못했을 때 4 등분 후 각각에 대해 조건 확인을 반복한다.
- 이 과정에서 재귀 함수에 필요한 argument는 시작점의 좌표(R,C)와 색종이의 크기 L로 결정하면 되는 것을 확인했다.
Lesson learned
- 문제 풀이에 막혔을 때, 막힌 원인을 파악하고 그 원인을 해결하기 위해 내가 가지고 있는 도구가 무엇인지 나열해 생각해보는 것이 필요하다는 것을 생각했다. 수능 수학 문제를 풀 때 이런 식으로 사고를 했었는데 여전히 유효한 사고 방법인 것 같다.
'알고리즘 공부 > 백준 문제풀이' 카테고리의 다른 글
[python 백준] 1012번 유기농 배추 (0) | 2022.09.24 |
---|---|
[백준 python] 14499번 주사위 굴리기 (0) | 2022.09.21 |
[python 백준] 1463번 1로 만들기 (0) | 2022.09.05 |
[백준 python] 23288번 주사위 굴리기 2 (0) | 2022.08.15 |
[python 백준] 14890번 경사로 (2) | 2022.08.07 |