💡 오늘의 학습 키워드
- 깊이/너비 우선 탐색(DFS/BFS)
✅ 오늘 공부한 내용
- 오늘의 프로그래머스 문제! 리코챗 로봇
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👀 오늘의 회고
🔥 어떤 시도를 했는가?
- 오늘의 풀이
import java.util.*;
class Solution {
// 네 방향 상, 하, 좌, 우
private static final int[] dx = {-1, 1, 0, 0};
private static final int[] dy = {0, 0, -1, 1};
public int solution(String[] board) {
int n = board.length;
int m = board[0].length();
int startX = 0, startY = 0;
int goalX = 0, goalY = 0;
// 로봇과 목표 지점 위치 찾기
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (board[i].charAt(j) == 'R') {
startX = i;
startY = j;
} else if (board[i].charAt(j) == 'G') {
goalX = i;
goalY = j;
}
}
}
// BFS를 위한 큐와 방문 배열
Queue<int[]> queue = new LinkedList<>();
boolean[][] visited = new boolean[n][m];
// 초기 위치 큐에 삽입 및 방문 처리
queue.add(new int[] {startX, startY, 0}); // {x좌표, y좌표, 이동 횟수}
visited[startX][startY] = true;
// BFS 탐색
while (!queue.isEmpty()) {
int[] current = queue.poll();
int x = current[0];
int y = current[1];
int moves = current[2];
// 목표 지점에 도달했을 경우 이동 횟수 반환
if (x == goalX && y == goalY) {
return moves;
}
// 네 방향으로 이동
for (int dir = 0; dir < 4; dir++) {
int nx = x;
int ny = y;
// 해당 방향으로 이동 가능한 만큼 이동
while (true) {
int tx = nx + dx[dir];
int ty = ny + dy[dir];
if (tx < 0 || tx >= n || ty < 0 || ty >= m || board[tx].charAt(ty) == 'D') {
break; // 범위 밖이거나 장애물에 닿으면 이동 멈춤
}
nx = tx;
ny = ty;
}
// 새로운 위치를 큐에 넣고 방문 처리
if (!visited[nx][ny]) {
queue.add(new int[] {nx, ny, moves + 1});
visited[nx][ny] = true;
}
}
}
// 목표 지점에 도달할 수 없을 경우
return -1;
}
}
👩💻 내일은 무엇을 학습할 것인가?
- 항해99 문제 풀기
- 책 3권 다 읽기
'개인 공부 > TIL' 카테고리의 다른 글
[ TIL - PGS ] 99클럽 코테 스터디 35일차 TIL + 오늘의 학습 가이드 (0) | 2024.08.26 |
---|---|
[ TIL - PGS ] 99클럽 코테 스터디 34일차 TIL + 오늘의 학습 가이드 (0) | 2024.08.24 |
[ TIL - PGS ] 99클럽 코테 스터디 32일차 TIL + 오늘의 학습 가이드 (0) | 2024.08.22 |
[ TIL - PGS ] 99클럽 코테 스터디 31일차 TIL + 오늘의 학습 가이드 (0) | 2024.08.21 |
[ TIL - PGS ] 99클럽 코테 스터디 30일차 TIL + 오늘의 학습 가이드 (0) | 2024.08.21 |