[Programmers] 공원 산책
2023. 8. 2. 13:14ㆍComputer Sciences/Problem Solve
https://school.programmers.co.kr/learn/courses/30/lessons/172928#
문제 설명
단순 구현 문제로 주어진 조건대로 구현하면 해결할 수 있다. 특별히 설명할 건 없어 주석으로 처리하였다.
코드
class Solution {
public int[] solution(String[] park, String[] routes) {
int h = park.length; // 세로 길이
int w = park[0].length(); // 가로 길이
int curRow = -1;
int curCol = -1;
// 맵을 감싸기 위해 +2 한 배열 생성
int[][] tmpMap = new int[h + 2][w + 2];
// 주어진 배열을 못 가는 길로 감싸 예외 처리를 단순화
// 맵을 1로 테두리 처리
setBoundary(tmpMap);
// 맵 초기화
for (int row = 1; row <= h; row++) {
String line = park[row - 1];
String[] tokens = line.split("");
for (int col = 1; col <= w; col++) {
String token = tokens[col - 1];
/***
* O는 0으로 처리하고 배열은 기본적으로 0으로 초기화되므로
* O에 대한 처리 로직은 필요하지 않다.
***/
if (token.equals("S")) {
curRow = row;
curCol = col;
tmpMap[row][col] = 0;
continue;
}
if (token.equals("X")) {
tmpMap[row][col] = 1;
continue;
}
}
}
// 메인 로직
for (String route : routes) {
String[] info = route.split(" ");
String direction = info[0];
int distance = Integer.valueOf(info[1]);
int tmpRow = curRow;
int tmpCol = curCol;
boolean canMove = true;
for (int i = 1; i <= distance; i++) {
switch (direction) {
case "E": tmpCol++; break;
case "W": tmpCol--; break;
case "S": tmpRow++; break;
case "N": tmpRow--; break;
}
if (tmpMap[tmpRow][tmpCol] == 1) {
canMove = false;
break;
}
}
if (canMove) {
curRow = tmpRow;
curCol = tmpCol;
}
}
return new int[] {curRow - 1, curCol - 1};
}
private void setBoundary(int[][] map) {
// 0번째 컬럼 초기화
for (int row = 0; row < map.length; row++) {
map[row][0] = 1;
}
// n번째 컬럼 초기화
for (int row = 0; row < map.length; row++) {
map[row][map[0].length - 1] = 1;
}
// 0번째 로우 초기화
for (int col = 0; col < map[0].length; col++) {
map[0][col] = 1;
}
// m번째 로우 초기화
for (int col = 0; col < map[0].length; col++) {
map[map.length - 1][col] = 1;
}
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Programmers] 성격 유형 검사하기 (0) | 2023.08.03 |
---|---|
[Programmers] 개인정보 수집 유효기간 (0) | 2023.08.02 |
[Baekjoon] 2193번: 이친수 (0) | 2023.05.20 |
[Baekjoon] 9657번: 돌 게임 3 (0) | 2023.05.12 |
[Baekjoon] 1991번: 트리 순회 (0) | 2023.05.12 |