728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/172928
생각
- 수도코드를 작성한 대로 코드를 작성하는 것에 점차 익숙해지고 있다.
- BFS 에 대한 개념을 묻는 문제인 것 같고, 어렵지 않게 해결할 수 있었다.
1. dh, dw 배열 생성
2. 2차원 배열 생성해서 채우기
3. routes 를 순회하며 해당 명령어를 수행할 수 있는지 판단.
4. 가능할 경우 이동
5. 끝난 후 위치 반환
코드
public class Main {
public static void main(String[] args) {
System.out.println(solution(new String[] {"SOO","OOO","OOO"},new String[]{"E 2","S 2","W 1"}));
System.out.println(solution(new String[] {"OSO","OOO","OXO","OOO"},new String[]{"E 2","S 3","W 1"}));
}
// 1. dh, dw 배열 생성 - 상,하,좌,우
public static int[] dh = {-1,1,0,0};
public static int[] dw = {0,0,-1,1};
public static int[] solution(String[] park, String[] routes) {
int curH = 0;
int curW = 0;
// 2. 2차원 배열 생성해서 채우기
String [][] map = new String[park.length][park[0].length()];
for (int i = 0; i < park.length; i++) {
String [] row = park[i].split("");
for (int j = 0; j < park[i].length(); j++) {
map[i][j] = row[j];
if("S".equals(map[i][j])){
curH = i;
curW = j;
}
}
}
// 3. routes 를 순회하며 해당 명령어를 수행할 수 있는지 판단.
for (int i = 0; i < routes.length; i++) {
String dir = routes[i].split(" ")[0];
int dir_idx = 0;
if("S".equals(dir)) dir_idx = 1;
else if("E".equals(dir)) dir_idx = 3;
else if("W".equals(dir)) dir_idx = 2;
int distance = Integer.valueOf(routes[i].split(" ")[1]);
boolean correct_cmd = pandan(park, distance, dir_idx, curW, curH, map);
if(correct_cmd){
int nh = curH + dh[dir_idx]*distance;
int nw = curW + dw[dir_idx]*distance;
map[curH][curW] = "O";
map[nh][nw] = "S";
curH = nh;
curW = nw;
}
}
return new int[]{curH,curW};
}
// 하나씩 길이 늘려가며 해당되는지 안되는지 판단
private static boolean pandan(String[] park, int distance, int dir_idx, int curW, int curH, String[][] map) {
for (int j = 1; j <= distance; j++) {
int nw = dw[dir_idx]*j + curW;
int nh = dh[dir_idx]*j + curH;
if (0> nw || nw >= park[0].length() || 0> nh || nh >= park.length || "X".equals(map[nh][nw])) {
return false;
}
}
return true;
}
}
다른 사람 코드
다른 사람의 코드도 비슷하다.
728x90
반응형
'Dev > Algorithm' 카테고리의 다른 글
[프로그래머스] 덧칠하기 - Java (0) | 2024.05.20 |
---|---|
[프로그래머스] 바탕화면 정리 - Java (0) | 2024.05.20 |
[프로그래머스] 추억 점수 (0) | 2024.05.20 |
[프로그래머스] 달리기 경주 (0) | 2024.05.18 |
[프로그래머스] 데이터 분석 (0) | 2024.05.18 |