리트코드 미디엄 매트릭스 시뮬레이션 문제를 풀어보았다. 이 전에 풀었던 Spiral Matrix I, II 시리즈에 경우는 그리드가 이미 주어졌고 회전 방향에 따라서 순서를 바꿔주고 direction 에 따라서 top,bottom,left, 그리고 right을 조절 해줬어야했다.
오랜만에 푸는 Matrix 기반 시뮬레이션 문제였는데 꽤 높았던 정답률에 비례해가지고 솔직히 너무 좀 고민도 많이 하고 고전했었다. 문제가 좀 특이 하다고 생각했던것은 spiral 방향으로 갈수있되, 그 방향이 벡터 밖으로도 나간다는 가정이였다. 개인적으로 이 부분이 많이 까다롭다고 생각했었고 회오리 방향으로 갔을때 각 원소들의 좌표를 저장했어야했다.
난 이 부분에서 visited 벡터같은걸 이용해가지고 이미 지나간 경로를 겹치지 않게 저장해야한다거나 이미 지나간 경로였을경우 그냥 continue를 했어야했나 싶었지만 그럴 필요가 없었다. 정말 간단히 생각했어야 했던 부분중 하나가
즉, 이동하는 방향에 따라서 움직이는 폭도 넓어져야하고 이 구간은 왼쪽으로 움직이거나 혹은 오른쪽 방향으로 이동할때 넓어져야 한다는 소리였다.
정말로 깔끔하다고 생각했던 코드였고, 나도 이렇게 했어야 했다는 생각이 들게 만든 문제였다. rStart 와 cStart같은경우 방향에 따라서 계속 움직이되, 아까 얘기한 방향에 따라서 움직이는 범위 (len) 도 늘려주었다. 그렇게 하다보니 겹치는 좌표도 자연스럽게 없어졌고 만약에 Matrix 범위 안에 있는경우 좌표를 저장함으로서 자연스럽게 정답으로 이어졌다.
배운점:
1. While 룹을 쓸때 움직이는 범위는 항상 헷갈리는거같다
2. 시뮬레이션에서 중요한 Tracking 연습...