https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 
N, S, E, W 값을 받아 해당 방향으로 주어진 숫자만큼 이동하는 문제입니다.
 
4 방향으로 이동을 하는 간단한 문제지만, 왠지 쉽게 풀리지 않았습니다.
 
방향과 이동 횟수가 String으로 주어지는데, 그걸 split 하는 과정에서 [N, S, E, W] 값이 String으로 들어오기 때문에,
 
그걸 direction == "S" 와 같이 비교를 해주니 값이 계속 false가 나와 풀리지 않았습니다.
 
문자열과 문자열을 비교할 때는 == 연산을 쓰는 것이 아니라 equals로 비교를 해야 제대로 된 답이 나옵니다.
 
문제를 풀고 나서 다른 사람들은 자바로 어떻게 문제를 풀었는지 확인해보니 charAt(0) 을 이용하여 char로 바꿔준 뒤 값을 비교하는 방법을 사용하기도 하였습니다.

 

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = {};
        int si = 0;
        int sj = 0;
        int[] di = {-1, 1, 0, 0};
        int[] dj = {0, 0, -1, 1};
        int d = 0;
        for(int i = 0; i < park.length; i++){
            String row = park[i];
            for(int j = 0; j < row.length(); j++){
                if (row.charAt(j) == 'S'){
                    si = i;
                    sj = j;
                }
            }
        }
        int ci = si;
        int cj = sj;
        for(String op : routes){
            String direction = op.split(" ")[0];
            System.out.println(direction);
            int num = Integer.valueOf(op.split(" ")[1]);
            int ni = ci;
            int nj = cj;
            if (direction.equals("N")){
                d = 0;
            } else if(direction.equals("S")){
                d = 1;
            } else if (direction.equals("W")){
                d = 2;
            } else if (direction.equals("E")){
                d = 3;
            }
            for(int i=0; i<num; i++){
                ni += di[d];
                nj += dj[d];
                if (ni < 0 || ni >= park.length || nj < 0 || nj >=park[0].length()){
                    break;
                } else if(park[ni].charAt(nj) == 'X') {
                    break;
                }
                if (i == num-1){
                    ci = ni;
                    cj = nj;
                }
            }
        }
        answer = new int[2];
        answer[0] = ci;
        answer[1] = cj;
        return answer;
    }
}

 

+ Recent posts