[코딩테스트] 프로그래머스 49994, 방문길이
2022. 7. 26. 01:32ㆍCodingTest
문제
https://school.programmers.co.kr/learn/courses/30/lessons/49994
문제접근
- (y,x) -> (ny,nx) 또는 (ny, nx) -> (y,x) 좌표 이동에 대한 이미 방문을 한적이 있다면 카운팅하지 않고 두 이동 처음 방문이라면 카운팅합니다.
- 다음 이동인 (ny, nx)에 대해서 범위를 벗어나면 다음 명령어로 넘어갑니다.
구현
import java.util.HashMap;
import java.util.Map;
class Solution {
public boolean move(boolean[][][][] points, int y, int x, int ny, int nx){
if(points[y][x][ny][nx] || points[ny][nx][y][x]){
return false;
}else{
points[y][x][ny][nx] = true;
points[ny][nx][y][x] = true;
return true;
}
}
public boolean check(int y, int x, int[] d){
if(y + d[0] < 0 || y + d[0] > 10 || x + d[1] < 0 || x + d[1] > 10){
return false;
}
return true;
}
public int solution(String dirs) {
int answer = 0;
boolean[][][][] points = new boolean[11][11][11][11];
int[][] direction = {{-1,0}, {1,0}, {0,-1}, {0,1}}; // 상,하,좌,우
Map<Character, Integer> map = new HashMap<>(){{
put('U', 0);
put('D', 1);
put('L', 2);
put('R', 3);
}};
int y = 5, x = 5, ny = 5, nx = 5;
for(char c : dirs.toCharArray()){
int[] d = direction[map.get(c)];
if(!check(y, x, d)){
continue;
}
ny += d[0];
nx += d[1];
if(move(points, y, x, ny, nx)){
answer++;
}
y += d[0];
x += d[1];
}
return answer;
}
}
'CodingTest' 카테고리의 다른 글
[코딩테스트] 프로그래머스 120897 약수 구하기 (0) | 2022.11.21 |
---|---|
[코딩테스트] 프로그래머스 120844 배열 회전시키기 (0) | 2022.11.17 |
[코딩테스트] 프로그래머스 92335, k진수에서 소수 개수 구하기 (0) | 2022.07.25 |
[코딩테스트] 프로그래머스 42842, 카펫 (0) | 2022.07.17 |
[코딩테스트] 프로그래머스 12949, 행렬의 곱셈 (0) | 2022.07.17 |