일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- array
- simulation
- hash table
- two pointers
- implement
- 코딩테스트
- Matrix
- Counting
- greedy
- Stack
- geometry
- 구현
- 자바
- SQL
- string
- Binary Tree
- Binary Search
- dynamic programming
- Number Theory
- 코테
- Math
- sorting
- database
- Tree
- Method
- bit manipulation
- 파이썬
- Data Structure
- Class
- Today
- Total
코린이의 소소한 공부노트
[프로그래머스/Lv.1] 공원 산책 본문
1. Input, Output, Example
로봇 강아지의 산책은 명령에 따라 진행한다. 로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인한다.
// 주어진 방향으로 이동할 때 공원을 벗어나는가?
// 주어진 방향으로 이동 중 장애물을 만나는가?
위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행한다.
- 로봇 강아지가 모든 명령을 수행 후 놓인 위치를 [세로 방향 좌표, 가로 방향 좌표] 순으로 배열에 담아 반환
2. Constraint
1) 공원의 가로 길이가 W, 세로 길이가 H라고 할 때, 공원의 좌측 상단의 좌표는 (0, 0), 우측 하단의 좌표는 (H - 1, W - 1)이다.
2) 3 ≤ park의 길이 ≤ 50
3) 3 ≤ park[i]의 길이 ≤ 50
4) park[i]는 S, O, X로 이루어져 있다.
5) S는 시작지점, O는 통로, X는 장애물이고, S는 1개만 주어진다.
6) park는 직사각형 모양이다.
7) 1 ≤ routes의 길이 ≤ 50
8) routes의 각 원소는 로봇 강아지가 수행할 명령어를 나타낸다.
9) 로봇 강아지는 routes의 첫 번째 원소부터 순서대로 명령을 수행한다.
10) routes의 원소는 "op n"과 같은 구조로 이루어져 있으며, op는 이동할 방향, n은 이동할 칸의 수를 의미한다.
11) op는 다음 네 가지중 하나로 이루어져 있습니다.
N : 북쪽으로 주어진 칸만큼 이동합니다.
S : 남쪽으로 주어진 칸만큼 이동합니다.
W : 서쪽으로 주어진 칸만큼 이동합니다.
E : 동쪽으로 주어진 칸만큼 이동합니다.
12) 1 ≤ n ≤ 9
3. Code
1) 첫 코드(2023/05/08)
class Solution {
public int[] solution(String[] park, String[] routes) {
int[] answer = new int[2];
int h = park.length, w = park[0].length(); // row, col
for(int i=0 ; i<h ; i++)
for(int j=0 ; j<w ; j++)
if(park[i].charAt(j)=='S'){
answer[0] = i; answer[1] = j;
break;
}
for(int i=0 ; i<routes.length ; i++){
int move = routes[i].charAt(2)-'0';
if(routes[i].charAt(0)=='E'){
if(answer[1]+move>=w) continue;
boolean block = false;
for(int j=1 ; j<=move && !block ; j++)
if(park[answer[0]].charAt(answer[1]+j)=='X')
block = true;
if(!block)
answer[1] += move;
} else if(routes[i].charAt(0)=='W'){
if(answer[1]-move<0) continue;
boolean block = false;
for(int j=1 ; j<=move && !block ; j++)
if(park[answer[0]].charAt(answer[1]-j)=='X')
block = true;
if(!block)
answer[1] -= move;
} else if(routes[i].charAt(0)=='S'){
if(answer[0]+move>=h) continue;
boolean block = false;
for(int j=1 ; j<=move && !block ; j++)
if(park[answer[0]+j].charAt(answer[1])=='X')
block = true;
if(!block)
answer[0] += move;
} else{
if(answer[0]-move<0) continue;
boolean block = false;
for(int j=1 ; j<=move && !block ; j++)
if(park[answer[0]-j].charAt(answer[1])=='X')
block = true;
if(!block)
answer[0] -= move;
}
}
return answer;
}
}
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[LeetCode/Easy] 70. Climbing Stairs (0) | 2023.05.09 |
---|---|
[LeetCode/Easy] 67. Add Binary (0) | 2023.05.09 |
[프로그래머스/Lv.1] 추억 점수 (0) | 2023.05.08 |
[LeetCode/Easy] 2670. Find the Distinct Difference Array (0) | 2023.05.08 |
[LeetCode/Easy] 2656. Maximum Sum With Exactly K Elements (0) | 2023.05.08 |