https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 나의 풀이
✅ 공원 가로길이 w, 세로길이 h
int w = park[0].length();
int h = park.length;
✅ 공원 char 이차원배열 ➡︎ 배열 크기 할당 시에, 세로*가로 (🚨[h][w]) 주의
char[][] parkArray = new char[h][w];
좌표처럼 가로가 x, 세로가 y 라고 생각하면 안됨. 아래 그림 내용 참고

✅ 시작점 S 위치 먼저 찾고, 공원 산책 시작
이동중 현재 위치 ➡︎ parkArrays[x][y] (초기값 : 시작점)
- 동 : → (y++)
- 서 : ← (y--)
- 남 : ↓ (x++)
- 북 : ↑ (x--)
✅ 명령 수행 여부 T/F ➡︎ flag
- 주어진 방향으로 이동할 때, 공원을 벗어나지 않는다 && 주어진 방향으로 이동 중 장애물을 만나지 않는다 ➡︎ true
- 주어진 방향으로 이동할 때, 공원을 벗어난다 || 주어진 방향으로 이동 중 장애물을 만난다 ➡︎ false
- 나의 코드
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] answer = new int [2];
//공원 가로길이 w, 세로길이 h
int w = park[0].length();
int h = park.length;
//공원 이차배열 h*w
char[][] parkArray = new char[h][w];
//시작점 S
for(int i=0; i<h; i++) {
for(int j=0; j<w; j++) {
parkArray[i][j] = park[i].charAt(j);
if(parkArray[i][j] == 'S') {
answer[0] = i;
answer[1] = j;
}
}
}
//System.out.println("start : " + answer[0] + "," + answer[1]);
//공원산책
for(String route : routes) {
char dir = route.charAt(0);
int cnt = Integer.parseInt(route.substring(2,3));
int x = answer[0];
int y = answer[1];
boolean flag = true;
for(int i=0; i<cnt; i++) {
//동 E
if(dir == 'E' && y+1 < w && parkArray[x][y+1] != 'X') {
y++;
continue;
}
//서 W
if(dir == 'W' && y-1 >= 0 && parkArray[x][y-1] != 'X') {
y--;
continue;
}
//남 S
if(dir == 'S' && x+1 < h && parkArray[x+1][y] != 'X') {
x++;
continue;
}
//북 N
if(dir == 'N' && x-1 >= 0 && parkArray[x-1][y] != 'X') {
x--;
continue;
}
flag = false;
break;
}
if(flag) {
answer[0] = x;
answer[1] = y;
}
}
return answer;
}
}
'공부 > 알고리즘' 카테고리의 다른 글
N-Queen (0) | 2024.11.01 |
---|---|
2019 KAKAO BLIND RECRUITMENT > 실패율 (1) | 2024.11.01 |
카펫 (0) | 2024.08.03 |
2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물 (0) | 2024.08.01 |
같은 숫자는 싫어 (0) | 2024.08.01 |