빛의 경로 사이클

유승선 ·2022년 2월 11일
0

프로그래머스

목록 보기
12/48


어떤 문제를 풀지 고민하던중에 프로그래머스에 내가 못푼 레벨2 문제를 전부 다 풀어볼까 하는 마음가짐으로 몇달동안 눈팅만 하던 월간 코드 챌린지 시즌3 문제를 좀 풀어보았다. 항상 고난이도 문제만 푼다고 생각했던 나였기에 월간 코드 챌린지는 어렵지 않게 생각했어서 도전했다가 문제 읽고 너무 많은 고민이 들었고 풀기가 힘들었다. 이 문제는 직접적으로 어떤 유형이라고 나와있지는 않았지만 "구현" 과 "완전탐색" 의 조합이 섞인 문제였다. 스트링으로 이루어진 벡터에서 각 캐릭터마다 빛을 쏘았을때 싸이클이 만들어진다면, 그 길이를 벡터에 담고 오름차순으로 리턴하면 되는문제이다.

솔직히 문제의 사진만 뚫어지게 보고도 이해가 첨에는 안됐는데 계속 보다보니 뭔가 알거같긴 했었다. 그런데 구현하는 부분에 있어서 너무 벽이 크게 느껴졌고 결국 다른 사람의 문제 풀이와 해석을 덩달아서 보게됐고 아 이런문제였구나 하고 깨닫게 되었다.

정답 참고 블로그 출처: https://yabmoons.tistory.com/709
예전에도 이분의 블로그를 참고하였는데 정말 잘 푸는거같다. 진짜 나도 분발해야겠다.

빛이 오는 4방항을 동서남북으로 표현한 k의 변수를 이용했다. 결국 모든 캐릭터를 탐방하면서 빛을 전부 쏴바야하기때문에 이런식의 for 룹을 사용한거같다. light라는 함수를 이용해서 싸이클이 만들어졌으면 answer에 넣었다.

글로벌 변수에는 visited 라는 3차원 벡터를 사용했는데 이 부분이 가장 신박했다. 처음은 어느 구간에서 어느구간으로 가는지, 그리고 어느 방향에서 왔는지를 표현한 3차원 벡터인데 이렇게도 풀수있겠구나 하고 깨달아버린 좋은 예시였다.

만약 같은 캐릭터를 같은 방향에서 빛을 쏜 기록이 있다면 싸이클이 완성된 것이기때문에 싸이클이 완성된순간 유지하고 있던 cnt를 리턴했다. 이 과정에서 나 혼자였으면 생각하기 힘들었을법한 부분중 하나는 x 가 그리드 밖으로 갔을때는 빛이 다시 돌아오므로 x의 값을 조정해준것이고 newDir 같은경우는 동서남북 방향에서 어디에서 오느냐에 따라 달라지기때문에 findDir 함수를 사용해줘서 방향을 업데이트 해줬다.

두가지 방향이 있는데 L 과 R이 있다. 동서남북 방향 어디서 오냐에 따라서 이동해야하는 위치가 달라지기때문에 위에 적었던 Dir 벡터에 맞춰서 조정을 해줬다. 이 부분도 내가 어떻게 해야하지 하는 부분중 하나였는데 새롭게 배운거같다.

배운점:
1. 다른 사람의 코드 또한 잘 배우고 이용하자
2. 방향을 바꾸는 시나리오 유형의 문제를 더 많이 풀어보자
3. 완전탐색같은 경우 머리속에서 생각을 많이 해야할듯

profile
성장하는 사람

0개의 댓글