Java & Spring/코딩테스트

23일차 - 알고리즘 코드카타

DJ.Kang 2024. 8. 14. 22:00

- 회고

73. 공원산책 : https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

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

programmers.co.kr

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int[] answer = new int[2];

        // 시작점 찾기
        for (int i = 0; i < park.length; i++) {
            if (park[i].contains("S")) {
                answer[0] = i;
                answer[1] = park[i].indexOf("S");
                break;
            }
        }

        // routes 확인
        for (String r : routes) {
            String[] rArr = r.split(" ");
            String dir = rArr[0];
            int dis = Integer.parseInt(rArr[1]);
            boolean conX = true;

            switch (dir) {
                case "E":
                    if (answer[1] + dis < park[0].length()) {
                        if (!park[answer[0]].substring(answer[1] + 1, answer[1] + dis + 1).contains("X")) {
                            answer[1] += dis;
                        }
                    }
                    break;
                case "W":
                    if (answer[1] - dis >= 0) {
                        if (!park[answer[0]].substring(answer[1] - dis, answer[1]).contains("X")) {
                            answer[1] -= dis;
                        }
                    }
                    break;
                case "S":
                    if (answer[0] + dis < park.length) {
                        for (int i = answer[0] + 1; i <= answer[0] + dis; i++) {
                            if (park[i].charAt(answer[1]) == 'X') {
                                conX = false;
                                break;
                            }
                        }
                        if (conX) {
                            answer[0] += dis;
                        }
                    }
                    break;
                case "N":
                    if (answer[0] - dis >= 0) {
                        for (int i = answer[0] - 1; i >= answer[0] - dis; i--) {
                            if (park[i].charAt(answer[1]) == 'X') {
                                conX = false;
                                break;
                            }
                        }
                        if (conX) {
                            answer[0] -= dis;
                        }
                    }
                    break;
            }
        }
        return answer;
    }
}

 

- 풀이 과정 :

  1. for문을 통해 park의 각 요소를 돌며 S를 포함한 문자열이 있는지 확인
  2. S가 있으면 해당 문자열에서 S의 인덱스를 찾아 시작지점으로 설정
  3. routes를 돌며 split을 통해 방향과 거리를 나누고
  4. 방향에 따른 case문 작성
  5. case문 작성 시 가는 길에 X의 포함 여부와, 공원의 범위를 초과하는 경우를 조건문으로 걸러냄

- 진행

일자 완료 번호
24.07.16 ~ 24.07.31 1~63
24.08.01 64
24.08.02 65
24.08.05 66
24.08.06 67
24.08.07 68
24.08.08 69
24.08.09 70
24.08.12 71
24.08.13 72
24.08.14 73