Spiral Matrix III

유승선 ·2022년 5월 24일
0

LeetCode

목록 보기
44/122

리트코드 미디엄 매트릭스 시뮬레이션 문제를 풀어보았다. 이 전에 풀었던 Spiral Matrix I, II 시리즈에 경우는 그리드가 이미 주어졌고 회전 방향에 따라서 순서를 바꿔주고 direction 에 따라서 top,bottom,left, 그리고 right을 조절 해줬어야했다.

오랜만에 푸는 Matrix 기반 시뮬레이션 문제였는데 꽤 높았던 정답률에 비례해가지고 솔직히 너무 좀 고민도 많이 하고 고전했었다. 문제가 좀 특이 하다고 생각했던것은 spiral 방향으로 갈수있되, 그 방향이 벡터 밖으로도 나간다는 가정이였다. 개인적으로 이 부분이 많이 까다롭다고 생각했었고 회오리 방향으로 갔을때 각 원소들의 좌표를 저장했어야했다.

난 이 부분에서 visited 벡터같은걸 이용해가지고 이미 지나간 경로를 겹치지 않게 저장해야한다거나 이미 지나간 경로였을경우 그냥 continue를 했어야했나 싶었지만 그럴 필요가 없었다. 정말 간단히 생각했어야 했던 부분중 하나가

  • 오른쪽으로 한칸 움직이고, 밑으로 한칸 움직이고, 왼쪽으로 이동할때는 범위가 더 넓어져야한다 그리고 다시 오른쪽으로 갈때도 범위가 넓어져야한다.

즉, 이동하는 방향에 따라서 움직이는 폭도 넓어져야하고 이 구간은 왼쪽으로 움직이거나 혹은 오른쪽 방향으로 이동할때 넓어져야 한다는 소리였다.

정말로 깔끔하다고 생각했던 코드였고, 나도 이렇게 했어야 했다는 생각이 들게 만든 문제였다. rStart 와 cStart같은경우 방향에 따라서 계속 움직이되, 아까 얘기한 방향에 따라서 움직이는 범위 (len) 도 늘려주었다. 그렇게 하다보니 겹치는 좌표도 자연스럽게 없어졌고 만약에 Matrix 범위 안에 있는경우 좌표를 저장함으로서 자연스럽게 정답으로 이어졌다.

배운점:
1. While 룹을 쓸때 움직이는 범위는 항상 헷갈리는거같다
2. 시뮬레이션에서 중요한 Tracking 연습...

profile
성장하는 사람

0개의 댓글