1. 생각
// 0: 벽, 1: 벽 아님
// 생각
// 시작점부터 시작해서 상하좌우를 살피면서 1이면 거기로 가고 0이면 안 가고
// 근데 최단 경로로 가야 하니까 bfs
// 구현
// 시작점을 bfs에 넣기
// bfs
// 시작점과 maps를 매개변수로 받기
// bfs 위한 큐 생성
// 시작점을 큐에 넣기
// 큐가 비어있지 않을 때까지 반복
// 큐에서 하나 빼고 방문했다고 표시하고 길이 1 증가
// 큐에서 뺀 거 기준으로 상하좌우 돌기 위해 for문으로 4번 돌기
// 시작점 기준 상하좌우가 maps 안에 있으면서 1이면 해당 위치를 큐에 넣기
초반에 생각했던 걸로 이 구현 틀은 틀렸다...
2. 회고
- visited 배열의 행 열을 반대로 설정했었다... 곰곰이 생각해보니 답이 보이는데 그땐 왜 그랬는지
- 큐에 int배열을 어떻게 넣어야 할지 고민하다 냅다 넣었더니 오류 났다. 미리 배열을 만들고 그 배열의 변수 이름을 넣어 주니 해결
- 마지막 지점에 들렸을 때의 처리와 아예 마지막 지점에 가지 못한 경우 처리를 뒤늦게 깨달았다
- 가장 중요한데 놓쳤던 부분은 맨 첫 지점부터의 거리를 구하는 것인데.. 내가 생각했던 방식은 answer라는 변수를 하나 설정해서 특정 위치에서 다음 위치로 이동할 수 있을 때마다 해당 answer를 1씩 증가한 다음 그 answer를 리턴하는 방식이었다. 그런데 계속 해도 틀려서 참고한 코드에서는 특정 위치에서 다음 위치로 이동할 수 있을 때마다 다음 위치에 처음부터 다음 위치까지의 거리를 구해 maps를 업데이트 하는 방식으로 구현하고 있었다.
- 그런데 answer를 1씩 증가하는 방법으로도 풀 수 있긴 하다.... 추후 이 둘의 차이에 대해 알아봐야 할 듯.
- 그래도 예전엔 감을 못 잡았는데 이번엔 기본 틀은 구현해내서 나아진 것 같음
3. 기억
- 큐에 int 배열 넣는 방법
Queue<int[]> q = new LinkedList<int[]>();
int[] arr = {1,2};
q.add(arr);
4. 체크
풀이 횟수 | 시간 | 정답 여부 | 참고 여부 |
2 | 1시간 30분 | O |
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 최솟값 만들기_12941 (0) | 2023.07.20 |
---|---|
[프로그래머스] JadenCase 문자열 만들기_12951 (0) | 2023.07.20 |
[프로그래머스/자바] 타겟 넘버_43165 (0) | 2023.07.19 |
[프로그래머스] 모음사전_84512 (0) | 2023.07.18 |
[프로그래머스] 전력망을 둘로 나누기_86971 (0) | 2023.07.18 |