달팽이 문제는 많이 기억에 남는 문제이다. 왜냐하면 싸피를 시작하며 처음 알고리즘을 알게 되었고, 알고리즘 스터디에서 문제를 풀 때, 나에게 절망을 준 문제 중 하나였기 때문이다. 그때 다른 분들이 조건을 찾아서 풀거나 delta기법을 이용하여 문제를 풀 때, 어떻게 그렇게 구현하지 생각하며 부러워했던 기억이 난다. 그래도 이제는 나도 그때 달팽이 문제보다 조금 어려워진 문제를 구현으로 바로 풀어내는 것을 보니 성장했다는 것이 체감되는 아주 기분 좋은 문제였다.
문제는 아마 알고리즘 문제를 풀어 보는 모든 사람들이 익숙한 문제일 것이다. 이문제가 다른점은 달팽이가 삼각형 모양으로 움직인다는 것이다.
문제를 보면 1번위치에서 출발해서 왼쪽 아래 꼭짓점, 오른쪽 아래 꼭짓점, 다시 위쪽 꼭짓점 방향으로 달팽이가 돈다. 이문제는 다양한 방법으로 풀 수 있을 것 같지만, 나는 초심을 살려 델타 기법으로 문제를 풀었다.
내가 문제를 푼 핵심은
1. 출력은 위에서부터 순서대로 할 것이기 때문에 배열에는 직각삼각형 형태로 저장해도 상관없다.
2. 달팽이는 항상 왼쪽밑방향 → 오른쪽 밑 방향 → 윗방향으로 움직인다. 따라서 이 순서대로 탐색을 하고 더 이상 갈 곳이 없다면 종료 조건이 된다.
이런 조건들을 활용하여 문제를 풀었다.
if문에서 계속 갈 수 있는지 검사를 하고, 갈 수 있다면 위치 갱신 후 break를 했으며, else문을 통해 방향을 바꾸는 작업을 수행했다.
방향을 세번 바꿨는데 통과하지 못했다는 것은 더 이상 갈 곳이 없다는 뜻이며, 이는 종료 조건을 의미한다.
어떻게 보면 문제설명과 그림만 어려워 보이는 거지, 우리가 알던 달팽이문젱와 거의 똑같은 문제였다. 어려운 문제는 아니었지만 나에게 보람과 성취감을 주는 기분 좋은 문제였던 것 같다.
오늘도 파이팅!!
'알고리즘' 카테고리의 다른 글
[백준] MooTube(Sliver) : 15591 Python (Pypy) (0) | 2022.05.21 |
---|---|
[PROGRAMMERS] 깊이/너비 우선 탐색 : 타겟넘버 Python (0) | 2022.05.21 |
[PROGRAMMERS] 2021 Dev-Matching: 다단계 칫솔 판매 Python (0) | 2022.05.17 |
[PROGRAMMERS] 2022 KAKAO BLIND RECRUITMENT : 주차 요금 계산 Python (0) | 2022.05.16 |
[PROGRAMMERS] 2017 팁스타운 : 예상 대진표 Python (0) | 2022.05.14 |