이미 내 블로그에는 Spiral Matrix 시리즈가 1과 3을 다 끝내놨는데 너무 뜬금없게 2시리즈가 올라온거에 좀 의아해 할 수도 있을거같다.
그런데 앞으로 볼 코딩 테스트를 대비해서 이런 Matrix 문제도 다시 리마인드 할겸 풀었던걸 다시 풀었는데 생각보다 잘 안풀렸었다. 이미 풀어본 문제를 틀리는 기분만큼 안좋은 기분이 있을까 싶어서 내 블로그를 다시 읽어봤는데 Matrix 관련 구현문제를 풀때 내가 좀 착각했던게 있었고 그 생각을 정리할려고 스파이럴 시리즈 2 를 풀어보았다.
Matrix 관련 문제는 내 경험상 2가지의 유형 문제가 있다.
1번 경우는 특정 방향으로 숫자를 옮겨야하는데 우리가 평균적으로 숫자를 옮길때 새로운 변수를 만들어 옮길 숫자를 저장하고 그 위치에 안전하게 숫자를 옮기는 행위에 swap() 형식을 해줘야한다
2번 경우는 채워나갈수 있는 칸이 존재하지 않을때까지 계속해서 룹을 돌려줘야한다
이 두가지 루핑에서 다른 점은 바로 끝내야하는 조건인데, 1번 경우에는 그냥 방향에 따라서 한번만 둘러주면은 끝이 난다
반대로, 2번 경우는 한번만 둘러서 끝이 아니라 계속해서 돌려야 하는거고 이 과정에서 방향이 꼬일수도 있기때문에 dir 변수를 만들어줘야하고 탐색하는 끝부분 또한 매 룹 마다 바꾸어 줘야지 overflow 가 없이 통과를 할 수가 있다.
그리고 좀 다른점을 꼽자면은 매 룹 마다 출력을 하거나 Matrix를 채워줘야 하는거면 j <= right 처럼 끝까지 탐색해주는게 좋다. 반대로 그 경우가 아닐 경우는 한칸만 남기고 j < right 형식으로 탐색을 진행해주는게 좋은거같다.
저번에 봤던 롯데 코딩테스트 문제에서도 이거와 똑같은 문제가 나왔는데 물론 스파이럴 방향이 아닌 좀 괴상한 방향으로 구현을 하라 했었다. 그런데 난 그때 dir 변수를 안썼고 매 룹마다 방향을 조절 하는것도 안했었기때문에 좀 더 넓고 복잡한 구현의 크기가 나왔을때 틀렸던걸수도 있었겠다 라는 생각이 들었다.
배운점:
1. Matrix 탐색을 할때 Filling 을 하는건지 Swapping 을 하는건지 확인
2. 각각 다르게 탐색 범위를 조절 해줘야한다.