728x90
⬛ 프로그래머스 | LV.1 공원 산책 - 단순 구현 문풀 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/172928
💚문제 접근 방식
- 명령어에 따른 현재 좌표를 갱신하는 문제인데, 명령어를 무시하는 조건은 1) 경계값 벗어날 경우 2) 가는 도중 ‘X’ 장애물 만날 경우이다.
- 일단 nx와 ny를 명령어에 따라 이동 시키고, 무시해야할 조건에 걸리는 명령어라면 갱신하지 않고, 그렇지 않다면 계속해서 st[] 에 이동한 좌표를 갱신하며 풀면 된다.
💚 제출 코드
import java.util.*;
class Solution {
//솔루션 함수
public int[] solution(String[] park, String[] routes) {
int[] answer = new int[2];
int N = park.length;
int M = park[0].length();
char[][] map = new char[N][M];
int[] st = new int[2];
for(int i=0; i<N; i++){
map[i] = park[i].toCharArray();
if(park[i].contains("S")){
st[0] = i;
st[1] = park[i].indexOf("S");
}
}
for(String route : routes){
String quer = route.split(" ")[0];
int len = Integer.parseInt(route.split(" ")[1]);
int nx = st[0];
int ny = st[1];
for(int i=0; i<len; i++){
if(quer.equals("E")){ //동 열(y)++
ny++;
}
if(quer.equals("W")){//서 (열) y--
ny--;
}
if(quer.equals("S")){//남 (행) x++
nx++;
}
if(quer.equals("N")){//북 (열)x--
nx--;
}
//명령 무시 이전으로 돌아가기
if(nx < 0 || ny <0 || nx >= N || ny >= M || map[nx][ny] == 'X'){
break;
}
//그게 아니면 변경
if(i == len-1){
st[0] = nx;
st[1] = ny;
System.out.println(st[0]+ " "+st[1] );
}
}
}
answer[0] = st[0];
answer[1] = st[1];
return answer;
}
}
💚 시간 복잡도
park나 route나 둘다 최대 50까지 들어온다. 여기서 각 명령어별로 이중 for문 돌면서 처리를 해주고 있지만, 데이터 크기가 50 정도이기 때문에 O(2500) 최악으로 두어번 돈다고 하더라도 크게 시간복잡도를 잡아먹지는 않는다.
728x90
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스(위클리) | LV.2 교점에 별 만들기 - 구현 문풀 (Java) (22) | 2024.02.28 |
---|---|
프로그래머스 | LV.2 혼자 놀기의 달인 - DFS 문풀 (Java) (20) | 2024.02.28 |
프로그래머스 | LV.3 인사고과 - 단순 구현 문풀 (Java) (21) | 2024.02.25 |
프로그래머스(카카오) | LV.2 양궁대회 - DFS, 완탐 문풀 (Java) (17) | 2024.02.25 |
프로그래머스 | LV.2 우박수열 정적분 - 단순 구현 문풀 (Java) (16) | 2024.02.25 |