Problem : 계란으로 계란치기
유형 : 완전 탐색
문제 해석
- 계란을 최대한 많이 깬 경우, 깨진 계란의 수가 몇개인지를 구하라.
문제 조건 확인, 재해석
- 계란은 가장 왼쪽부터 순차적으로 집는다.
- 한 계란으로 다른 계란은 단 한번 쳐볼 수 있다.
- 마지막 계란을 든 경우에도, 바로 종료 하는 것이 아닌 다른 계란을 칠수 있으면 친다.
해결 전략
DFS
를 통해 모든 경우에 대해서 구해본다.
설계, 구현
계란을 하나 집는다.
- 존재 하지 않는 계란인 경우 종료한다.
- 들고 있는 계란이 깨진 계란이라면 다음 계란을 집는다.
칠 계란을 고른다.
- 자기가 자신을 칠순 없다.
- 이미 깨진 계란이라면 치지 않는다.
주의할점
- 마지막에 계란을 들고, 더 이상 칠 계란이 없는 경우에 대해서 생각해야한다.
코드
1 |
|
피드백
- 문제가 모호하다고 느낀다면, 문제 해석이 제대로 되지 않은 것이다.
- 한 번씩만 다른 계란을 친다는 것을, 계란은 단 한번씩만 공격 당할 수 있다고 잘못 해석 했었다.
- 종이 없이 바로 코딩하는 연습을 해보았는데, 설계가 제대로 되지 않았다.
오늘 낮에 리팩토링 후 포스팅 해야겠다.