영드로이드개발자
용이의 개발블로그
영드로이드개발자

블로그 메뉴

  • ⭐️ Home
  • 💻 GitHub
  • ❤️ Instagram
  • 👍 LinkedIn
  • 분류 전체보기 (44)
    • 공지사항 (1)
    • Daily 공부방 (0)
    • 프로그래밍 언어 (8)
      • Java (7)
      • Kotlin (1)
    • 안드로이드(Kotlin) (16)
    • 코딩테스트(Java) (11)
      • 기초 자료구조 (3)
      • 백준 (0)
      • 프로그래머스 1단계 (5)
      • 프로그래머스 2단계 (3)
    • 알고리즘 정리 (5)
    • 주간 목표계획 및 회고 (2)
    • Project (1)
      • Android App - 오마이코인 (1)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
영드로이드개발자

용이의 개발블로그

[프로그래머스] 공원 산책 - JAVA
코딩테스트(Java)/프로그래머스 1단계

[프로그래머스] 공원 산책 - JAVA

2024. 2. 27. 15:55
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

입출력

이 문제는 프로그래머스 1단계 문제로써 문제에 적힌 조건만 잘 이해하면 쉽게 풀 수 있는 문제이다.

입력하는 되는 직사각형을 공원을 2차원 배열로 만들고 해당 명령어들에 따라서 X와 Y의 범위 조건을 잘 고려하여 명령어 이동을 실행시키면 되는 문제이다.

레벨1의 간단한 문제라고 볼 수 있다.

해당 방법 말고 조금더 깔끔하고 개선된 코드가 있을 수 있으니 공유 부탁드립니다 ^^

 

import java.util.Arrays;
import java.util.StringTokenizer;


class Solution {


    static String[][] arr; // 공원을 2차배열로 나타냄
    public static void main(String[] args) {
        String[] park = {"OSO","OOO","OXO","OOO"};
        String[] routes = {"E 2","S 3","W 1"};
        System.out.println(Arrays.toString(solution(park, routes)));
    }

    // 동 E 서 W 남 S 북 N
    static public int[] solution(String[] park, String[] routes) {
        int[] answer = new int[2];

        String[] a = park[0].split("");

        arr = new String[park.length][a.length];

        for (int i = 0; i < park.length; i++) {
            String[] str = park[i].split("");
            System.arraycopy(str, 0, arr[i], 0, a.length);
        }

        int x = 0;
        int y = 0;

        for (int i = 0; i < park.length; i++) {
            for (int j = 0; j < a.length; j++) {
                if (arr[i][j].equals("S")) {
                    x = i;
                    y = j;
                }
            }
        }

        for (String route : routes) {
            StringTokenizer st = new StringTokenizer(route);
            String location = st.nextToken();

            int size = Integer.parseInt(st.nextToken());

            boolean check = false;
            switch (location) {
                case "E" -> {
                    if (y + size < 0 || y + size >= a.length) {
                        break;
                    }
                    for (int j = y + 1; j <= y + size; j++) {
                        if (arr[x][j].equals("X")) {
                            check = true;
                            break;
                        }
                    }
                    if (!check) y = y + size;
                }
                case "W" -> {
                    if (y - size < 0 || y - size >= a.length) {
                        break;
                    }
                    for (int j = y - 1; j >= y - size; j--) {
                        if (arr[x][j].equals("X")) {
                            check = true;
                            break;
                        }
                    }
                    if (!check) y = y - size;
                }
                case "S" -> {
                    if (x + size < 0 || x + size >= park.length) {
                        break;
                    }
                    for (int j = x + 1; j <= x + size; j++) {
                        if (arr[j][y].equals("X")) {
                            check = true;
                            break;
                        }
                    }
                    if (!check) x = x + size;
                }
                case "N" -> { // "N"
                    if (x - size < 0 || x - size >= park.length) {
                        break;
                    }
                    for (int j = x - 1; j >= x - size; j--) {
                        if (arr[j][y].equals("X")) {
                            check = true;
                            break;
                        }
                    }
                    if (!check) x = x - size;
                }
            }

        }

        answer[0] = x;
        answer[1] = y;

        return answer;
    }
}

느낀점

해당 문제 같은 경우는 x와 y의 조건만 잘 이해하고 명령어를 실행시키면 되는 고민 없이 주어진 문제의 조건만 추가하면 쉽게 해결 할 수 있는 문제이다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트(Java) > 프로그래머스 1단계' 카테고리의 다른 글

[프로그래머스] 크레인 인형뽑기 게임 - JAVA  (0) 2024.02.28
[프로그래머스] 개인정보 수집 유효기간 - JAVA  (0) 2024.02.27
[프로그래머스] 달리기 경주 - JAVA  (0) 2024.02.27
[프로그래머스] 가장 많이 받은 선물 - JAVA  (2) 2024.02.27
    '코딩테스트(Java)/프로그래머스 1단계' 카테고리의 다른 글
    • [프로그래머스] 크레인 인형뽑기 게임 - JAVA
    • [프로그래머스] 개인정보 수집 유효기간 - JAVA
    • [프로그래머스] 달리기 경주 - JAVA
    • [프로그래머스] 가장 많이 받은 선물 - JAVA
    영드로이드개발자
    영드로이드개발자
    도전을 즐기는 안드로이드 개발자 현영우의 개발 Blog

    티스토리툴바