Spiral Matrix II

유승선 ·2022년 7월 1일
0

LeetCode

목록 보기
49/121

이미 내 블로그에는 Spiral Matrix 시리즈가 1과 3을 다 끝내놨는데 너무 뜬금없게 2시리즈가 올라온거에 좀 의아해 할 수도 있을거같다.

그런데 앞으로 볼 코딩 테스트를 대비해서 이런 Matrix 문제도 다시 리마인드 할겸 풀었던걸 다시 풀었는데 생각보다 잘 안풀렸었다. 이미 풀어본 문제를 틀리는 기분만큼 안좋은 기분이 있을까 싶어서 내 블로그를 다시 읽어봤는데 Matrix 관련 구현문제를 풀때 내가 좀 착각했던게 있었고 그 생각을 정리할려고 스파이럴 시리즈 2 를 풀어보았다.

Matrix 관련 문제는 내 경험상 2가지의 유형 문제가 있다.

  1. 특정 방향으로 숫자를 이동하는류의 문제
  2. 특정 방향으로 숫자를 계속 채워나가야 하는 문제

1번 경우는 특정 방향으로 숫자를 옮겨야하는데 우리가 평균적으로 숫자를 옮길때 새로운 변수를 만들어 옮길 숫자를 저장하고 그 위치에 안전하게 숫자를 옮기는 행위에 swap() 형식을 해줘야한다

2번 경우는 채워나갈수 있는 칸이 존재하지 않을때까지 계속해서 룹을 돌려줘야한다

이 두가지 루핑에서 다른 점은 바로 끝내야하는 조건인데, 1번 경우에는 그냥 방향에 따라서 한번만 둘러주면은 끝이 난다

반대로, 2번 경우는 한번만 둘러서 끝이 아니라 계속해서 돌려야 하는거고 이 과정에서 방향이 꼬일수도 있기때문에 dir 변수를 만들어줘야하고 탐색하는 끝부분 또한 매 룹 마다 바꾸어 줘야지 overflow 가 없이 통과를 할 수가 있다.

그리고 좀 다른점을 꼽자면은 매 룹 마다 출력을 하거나 Matrix를 채워줘야 하는거면 j <= right 처럼 끝까지 탐색해주는게 좋다. 반대로 그 경우가 아닐 경우는 한칸만 남기고 j < right 형식으로 탐색을 진행해주는게 좋은거같다.

저번에 봤던 롯데 코딩테스트 문제에서도 이거와 똑같은 문제가 나왔는데 물론 스파이럴 방향이 아닌 좀 괴상한 방향으로 구현을 하라 했었다. 그런데 난 그때 dir 변수를 안썼고 매 룹마다 방향을 조절 하는것도 안했었기때문에 좀 더 넓고 복잡한 구현의 크기가 나왔을때 틀렸던걸수도 있었겠다 라는 생각이 들었다.

배운점:
1. Matrix 탐색을 할때 Filling 을 하는건지 Swapping 을 하는건지 확인
2. 각각 다르게 탐색 범위를 조절 해줘야한다.

profile
성장하는 사람

0개의 댓글