250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 안드로이드
- 막내의막무가내 프로그래밍
- 부스트코스에이스
- 부스트코스
- 막내의막무가내 안드로이드 코틀린
- 막내의막무가내 rxjava
- 프로그래머스 알고리즘
- 막내의막무가내 알고리즘
- 막내의막무가내 안드로이드
- 막내의막무가내 목표 및 회고
- 막내의막무가내
- 막내의막무가내 코볼 COBOL
- 주택가 잠실새내
- flutter network call
- Fragment
- 2022년 6월 일상
- 막내의 막무가내
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 일상
- 막내의막무가내 코틀린
- 막내의막무가내 SQL
- 주엽역 생활맥주
- 막내의막무가내 플러터 flutter
- 프래그먼트
- 막무가내
- 안드로이드 sunflower
- 안드로이드 Sunflower 스터디
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 플러터
- 막내의 막무가내 알고리즘
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 프로그래머스 방문 길이 -Summer/Winter Coding(~2018)- (선을 방문하는 문제) 본문
알고리즘/DFS, BFS, 시뮬, 백트래킹
[알고리즘] 프로그래머스 방문 길이 -Summer/Winter Coding(~2018)- (선을 방문하는 문제)
막무가내막내 2020. 5. 18. 14:50728x90
https://programmers.co.kr/learn/courses/30/lessons/49994?language=java
프로그래머스 LEVEL3 의 방문 길이 문제를 풀어봤습니다 ㅎㅎ
처음에 별생각없이 좌표를 칸으로 취급하고 바로 2차원 배열의 map, isVIsisted 하고 bfs queue 로 접근해서 풀었는데 한문제만 맞고 나머지 한문제는 틀리고 오답이 나왔었습니다.
바로 위와 같이 7번처럼 방문이 안되야하는데 된걸로 되서 잘못풀었단거를 꺠달았습니다.
그래서 어디서 어디로 왔는지 알아야했습니다. 이를 4차원 배열을 이용해서 풀었습니다. 1,2 차원 지점에서 3,4차원지점으로 이동했다는 것을 기록합니다.
문제 풀이방법이 더 간단해졌습니다.
풀이는 다음과 같습니다.
[Java]
class Solution {
private static int answer = 0;
private static boolean[][][][] isVisited = new boolean[11][11][11][11]; // (x,y) -> (x,y) 로 이동한 적 있는지
private static int x, y; //현재좌표
private static int x2, y2; //이동할좌표
private static int[] dx = {-1, 0, 1, 0};
private static int[] dy = {0, -1, 0, 1};
public int solution(String dirs) {
x = 5;
y = 5;
x2 = 5;
y2 = 5;
for (char move : dirs.toCharArray()) {
x = x2;
y = y2;
if (move == 'L') { //좌하우상
x2 = x + dx[0];
y2 = y + dy[0];
} else if (move == 'D') {
x2 = x + dx[1];
y2 = y + dy[1];
} else if (move == 'R') {
x2 = x + dx[2];
y2 = y + dy[2];
} else {
x2 = x + dx[3];
y2 = y + dy[3];
}
//범위벗어난거처리
if (x2 < 0 || x2 > 10 || y2 < 0 || y2 > 10) {
//이동하기 전 좌표로 바꿔줌
x2 = x;
y2 = y;
continue;
}
//이동가능한 좌표, 첫방문이면 답 +1
if (!isVisited[x][y][x2][y2]) {
isVisited[x][y][x2][y2] = true;
isVisited[x2][y2][x][y] = true;
answer++;
}
}
return answer;
}
}
[kotlin]
internal class Solution {
fun solution(dirs: String): Int {
var answer = 0
val isVisited = Array(11) { Array(11) { Array(11) { BooleanArray(11) } } } // (x,y) -> (x,y) 로 이동한 적 있는지
var x: Int = 5 //현재좌표
var y: Int = 5
var x2: Int = 5 //이동할좌표
var y2: Int = 5
val dx = intArrayOf(-1, 0, 1, 0)
val dy = intArrayOf(0, -1, 0, 1)
for (move in dirs.toCharArray()) {
x = x2
y = y2
when (move) {
'L' -> { //좌하우상
x2 = x + dx[0]
y2 = y + dy[0]
}
'D' -> {
x2 = x + dx[1]
y2 = y + dy[1]
}
'R' -> {
x2 = x + dx[2]
y2 = y + dy[2]
}
else -> {
x2 = x + dx[3]
y2 = y + dy[3]
}
}
//범위벗어난거처리
if (x2 < 0 || x2 > 10 || y2 < 0 || y2 > 10) {
//이동하기 전 좌표로 바꿔줌
x2 = x
y2 = y
continue
}
//이동가능한 좌표, 첫방문이면 답 +1
if (!isVisited[x][y][x2][y2]) {
isVisited[x][y][x2][y2] = true
isVisited[x2][y2][x][y] = true
answer++
}
}
return answer
}
}
댓글과 공감은 큰 힘이 됩니다. 감사합니다!!
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 프로그래머스 단어 변환 -dfs, bfs- (0) | 2020.05.31 |
---|---|
[알고리즘] 프로그래머스 네트워크 -dfs, bfs- (2) | 2020.05.30 |
[알고리즘] 프로그래머스 타겟 넘버 -깊이/너비 우선 탐색(DFS/BFS)- (0) | 2020.05.16 |
[알고리즘] 프로그래머스 N-Queen -연습문제- -백트랙킹- (0) | 2020.05.16 |
[알고리즘] 프로그래머스 [1차] 프렌즈4 블록 -2018 KAKAO BLIND RECRUITMENT- (0) | 2020.05.11 |
Comments