반응형
문제
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 |