[일상] 알고리즘 잡스 수강 후기 -4 (손진호 대표님 특강2)

7/18 토요일 알고리즘 잡스를 시작한 지 2주일이 되었다. 지난주 토요일 하루만 특별히 알고리즘 잡스 대표님의 특강이 있는 줄 알았는데 알고 보니 매주 토요일마다 특강이 진행되는 듯하다. 오늘도 지난주와 마찬가지로 알고리즘 잡스 대표님의 특강이 있다고 한다. 알고리즘 책을 받고 설계 30분을 한 뒤 온라인 특강을 시작하였다. 특강의 내용은 저번 주와 마찬가지로 문제가 주어졌을 때 어떻게 문제에 접근을 하고, 설계를 하고 풀이를 하는지에 대한 설명이었다. 이번 주 특강 문제는 "회전 탑"이라는 문제이고 저번 주 문제였던 "회전판과 로봇"처럼 다양한 알고리즘이 한 군데 혼합되어있는 문제였다. 손진호 대표님은 이 문제를 풀기 위해서는 한 문제를 여러 개의 문제로 쪼개서 보는 능력을 키워야 한다고 강조하셨다. 이러한 문제가 실제 코딩 테스트에서 나온다면 다양한 알고리즘을 구현해야 하기에 시간이 많이 소요될 것 같아 문제를 빨리 이해하고 필요한 알고리즘을 분류해 빨리 구현해 내는 것이 관건일 듯하다. 

 

손진호 대표님 특강이 끝난 뒤 위와 같이 회전탑이라는 문제가 생겼다. 매주 토요일은 아침 10시에 수업을 시작하여 알고리즘 책을 받고 오늘 풀 문제를 설계를 한 후 특강을 듣고 문제를 푸는 이러한 패턴이 매주 토요일마다 반복 될 듯하다. 

 

회전 탑 문제 풀이

오늘 풀어 볼 회전 탑이라는 문제를 간략히 설명하자면 1층부터 N층까지의 회전 탑이 있고 각 층에 숫자가 있다. 이 회전 탑은 시계방향, 반시계 방향으로 회전을 할 수 있는데 회전되는 층은 배수관계에 있는 회전판들이 회전된다. 회전이 끝난 후 인접한 부분의 숫자가 같을 경우 숫자를 지우고 지워지는 숫자가 없을 경우 모든 층에 존재하는 숫자들의 평균을 구해 각각의 숫자와 비교하여 평균보다 크면 -1을 평균보다 작으면 +1을 해주어 판을 돌릴 때마다 판 위에 있는 숫자의 총점을 구하는 문제이다.

 

 

회전 탑이라는 문제를 풀기 위해서는 크게 두 가지 알고리즘이 필요하다. 회전판을 움직이는 "밀기" 알고리즘이 필요하고 회전판의 숫자를 비교하여 제거하는 "조회"라는 알고리즘이 필요하다. 지난 주와 마찬가지로 알고리즘 잡스에서는 각각의 알고리즘을 먼저 구현해볼 수 있게 미니 문제들을 7가지 만들어 놓았기에 이것 먼저 풀었다. 저번 주 문제와 비슷하여서인지 아니면 1주일 사이에 실력이 올라간 건지 모르겠지만 문제를 푸는 속도가 저번 주보다는 빨라진 것 같다.

 

실제 문제 풀이에서도 저번주에는 그냥 main에다가 모든 알고리즘을 구현하였는데 이번에는 알고리즘 하나하나마다 모두 함수로 만들어 좀 더 직관성을 높이고자 하였다. 이렇게 하니 문제가 발생해도 해결이 쉬웠다. 앞으로 풀이가 긴 문제들은 이렇게 함수로 풀어가는 게 좋을 듯 하다. 하지만 계속 답이 이상하게 나왔다. 문제점을 찾는 도중 실습시간이 끝나 문제를 완벽히 푸는 데는 다음을 기약해야 했는데 우리 반에서 한분은 이 문제를 푸는 데 성공하였다. 부러우면서도 대단하다는 생각이 들었다. 다음에는 나도 해내고 싶다. 더 열심히 공부해야지

 

 

 

 

 

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY