개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 35일차 TIL + 오늘의 학습 가이드

킴도비 2024. 8. 26. 00:28

💡 오늘의 학습 키워드

  • 깊이/너비 우선 탐색(DFS/BFS)

 

✅ 오늘 공부한 내용

  • 오늘의 프로그래머스 문제! 게임 맵 최단거리
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

👀 오늘의 회고

🔥 어떤 시도를 했는가?

  • 오늘의 풀이..
import java.util.LinkedList;
import java.util.Queue;

public class Solution {
    public int solution(int[][] maps) {
        // 지도 크기
        int n = maps.length;
        int m = maps[0].length;
        
        // 이동 방향 (동, 서, 남, 북)
        int[] dr = {1, -1, 0, 0};
        int[] dc = {0, 0, 1, -1};
        
        // BFS를 위한 큐와 방문 배열
        Queue<int[]> queue = new LinkedList<>();
        boolean[][] visited = new boolean[n][m];
        
        // 시작 위치 (1, 1)에서 BFS 시작
        queue.add(new int[]{0, 0});
        visited[0][0] = true;
        maps[0][0] = 1; // 시작 위치도 포함되도록 1로 설정
        
        // BFS 탐색
        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int r = current[0];
            int c = current[1];
            
            // 목표 지점에 도달하면 경로 길이 반환
            if (r == n - 1 && c == m - 1) {
                return maps[r][c];
            }
            
            // 4 방향 탐색
            for (int i = 0; i < 4; i++) {
                int nr = r + dr[i];
                int nc = c + dc[i];
                
                // 새로운 위치가 유효한지 확인
                if (nr >= 0 && nr < n && nc >= 0 && nc < m && maps[nr][nc] == 1 && !visited[nr][nc]) {
                    queue.add(new int[]{nr, nc});
                    visited[nr][nc] = true;
                    maps[nr][nc] = maps[r][c] + 1; // 이동 칸 수를 기록
                }
            }
        }
        
        // 도달할 수 없을 경우 -1 반환
        return -1;
    }
}

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 새벽에 일어나서 코딩하기...
  • 항해99문제 풀기...