[devmoon]프로그래머스 - 방문 길이
알고리즘/프로그래머스

[devmoon]프로그래머스 - 방문 길이

https://programmers.co.kr/learn/courses/30/lessons/49994

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

1. 유형

구현

 

2. 시뮬레이션

한 점은 방문하는 방향에 따라 여러가지 경우의 수가 나옴. 따라서 3차원 배열을 활용해서 방문체크

'U'일때, 2가지 경우의 길에 대해서 방문체크를 해야한다.

 

3. 코드

import java.util.*;
class Solution {
    static int D[][] = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };
	static int N=10;
	static public int solution(String dirs) {
		int answer = 0;
		char arr[] = dirs.toCharArray();
		int currentR = N/2, currentC = N/2;
		boolean visited[][][] = new boolean[4][N+1][N+1];

		for (char dir : arr) {
			int d = getDir(dir);
			int nextR = currentR + D[d][0];
			int nextC = currentC + D[d][1];
			if (!isValid(nextR, nextC)) {
				continue;
			}
			if(visited[d][nextR][nextC]) {
				currentR = nextR;
				currentC = nextC;
				continue;
			}
			visited[d][nextR][nextC] = true;
			visited[(d + 2) % 4][currentR][currentC] = true;
			answer++;
			currentR = nextR;
			currentC = nextC;
		}
		return answer;
	}

	static boolean isValid(int nextR, int nextC) {
		if (nextR < 0 || nextR >= N+1 || nextC < 0 || nextC >= N+1) {
			return false;
		}
		return true;
	}

	static int getDir(char dir) {
		switch (dir) {
		case 'U':
			return 0;
		case 'R':
			return 1;
		case 'D':
			return 2;
		case 'L':
			return 3;
		default:
			return 5;
		}
	}
}
/*
방문체크를 3차원배열
현재좌표 -> 다음좌표확인시 맵 이탈시 continue
*/

4. 느낀점

String -> char[]로 바꾸기

"title".toCharArray();