📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 구현, 시뮬레이션
1. 시작점 위치 S를 저장한다.
2. routes 배열을 돌면서 격자 범위를 벗어나지 않고, 장애물 X가 아니면 이동시킨다.
💥 유의사항
- 현재 있는 위치의 행과 열 위치를 옮기는 것이 아니고, 이 값을 복사한 임시변수를 이동시켜본다.
- 한 번에 n칸 바로 이동시키는 게 아니고, 1부터 n까지 이동시켜보면서 n 칸 옆으로 이동시킬 수 있으면 (flag == true) 임시변수의 값을 현재 위치의 값으로 저장하는 것이다,,
🔺 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
import java.util.*;
class Solution {
static String[] park, routes;
static int[] answer = new int[2];
public int[] solution(String[] park, String[] routes) {
this.park = park;
this.routes = routes;
for(int i = 0 ; i < park.length ; i++) {
for(int j = 0 ; j < park[0].length() ; j++) {
if(park[i].charAt(j) == 'S') { // S 위치에서부터 이동 시작
answer = new int[]{i, j};
}
}
}
for(String route : routes) {
char op = route.charAt(0);
int n = Integer.parseInt(route.substring(2));
boolean flag = true; // 이동할 수 있는지 나타내는 변수
int nowX = answer[0];
int nowY = answer[1];
for(int i = 0 ; i < n ; i++) { // 💥 한 번에 n번 이동하지 않고 1씩 이동시키기
if(op == 'N') {
if(!inRange(nowX - 1, nowY) || park[nowX - 1].charAt(nowY) == 'X') {
flag = false;
break;
}
nowX--;
}
if(op == 'S') {
if(!inRange(nowX + 1, nowY) || park[nowX + 1].charAt(nowY) == 'X') {
flag = false;
break;
}
nowX++;
}
if(op == 'W') {
if(!inRange(nowX, nowY - 1) || park[nowX].charAt(nowY - 1) == 'X') {
flag = false;
break;
}
nowY--;
}
if(op == 'E') {
if(!inRange(nowX, nowY + 1) || park[nowX].charAt(nowY + 1) == 'X') {
flag = false;
break;
}
nowY++;
}
}
if(flag) { // 이동할 수 있으면, 이동시키기
answer[0] = nowX;
answer[1] = nowY;
}
}
return answer;
}
// 격자 범위 벗어나는지 확인하는 변수
private static boolean inRange(int x, int y) {
return 0 <= x && x < park.length && 0 <= y && y < park[0].length();
}
}
|
cs |
➕ 다른 풀이 방식
dx/dy 배열에 동서남북 이동 방향 저장하고 활용할 수도 있다.
[프로그래머스] lv1 공원 산책 java [구현][엄탱]
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/172928 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁
tang25.tistory.com
🧐 새로 알게 된 내용
- 한 번에 행과 열의 현재 위치를 n칸 이동시키려고 했는데 그게 아니고, 현재 위치를 복사한 값을 반복문으로 1~n 칸씩 차례차례 이동시켜보는 것이었다.
- boolean 변수로 이동 가능한지 확인할 생각을 못 했다. (어쩐지 분명 맞게 했다 생각했는데 안 되더라,,)
- 문제를 제대로 읽자,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[ 프로그래머스 JAVA ] 공원 산책
문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/172928 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁
dev-ddol-e.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level2] 혼자 놀기의 달인 (JAVA) (0) | 2024.03.19 |
---|---|
[프로그래머스/Level2] 광물 캐기 (JAVA) (0) | 2024.03.19 |
[프로그래머스/Level3] 거스름돈 (JAVA) (0) | 2024.03.16 |
[프로그래머스/Level2] 테이블 해시 함수 (JAVA) (0) | 2024.03.16 |
[프로그래머스/Level2] 혼자서 하는 틱택토 (JAVA) (0) | 2024.03.14 |