https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그램 제작자
코드 중심 개발자를 고용하십시오. 배치 기반 위치 매칭. 프로그래머의 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.
Programmer.co.kr
생각하다
쉬운 구현은 아니라고 생각합니다.
태스크에서 주어진 조건을 구현하고 최종 위치를 반환합니다.
알고리즘 문제를 풀고 있는데 계속해서 방법의 이름이 생각난다.
그게 맞는지 궁금합니다
솔루션 – 그래프 탐색, 구현
import java.util.*;
class Solution {
private char()() board;
private int n,m;
private int nowX,nowY;
private final static int dx() = {0,1,0,-1};
private final static int dy() = {1,0,-1,0};
public int() solution(String() park, String() routes) {
convertToCharArr(park);
for(String route : routes){
StringTokenizer st = new StringTokenizer(route, " ");
// 동0 남1 서2 북3
int dir = getDirFrom(st.nextToken());
int dist = Integer.parseInt(st.nextToken());
if(checkIfCanGo(dir, dist)){
nowX += dist * dx(dir);
nowY += dist * dy(dir);
}
}
return new int(){nowX, nowY};
}
private boolean isIn(int x, int y){
return x >= 0 && y >= 0 && x < n && y < m;
}
private boolean checkIfCanGo(int dir, int dist){
for(int i = 1; i<=dist; i++){
int nx = nowX + i * dx(dir);
int ny = nowY + i * dy(dir);
if(!
isIn(nx,ny)) return false;
if(board(nx)(ny) == 'X') return false;
}
return true;
}
private int getDirFrom(String dirStr){
switch(dirStr){
case "E": return 0;
case "S": return 1;
case "W": return 2;
case "N": return 3;
}
return -1;
}
private void convertToCharArr(String() park){
n = park.length;
m = park(0).length();
board = new char(n)(m);
for(int i = 0; i<n; i++){
for(int j = 0; j<m; j++){
board(i)(j) = park(i).charAt(j);
if(board(i)(j) == 'S'){
nowX = i;
nowY = j;
}
}
}
}
}