원본 : https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
class Solution {
public int[] solution(String[] park, String[] routes) {
char[][] parkMap = new char[park.length][park[0].length()];
int startI = 0;
int startJ = 0;
for (int i = 0; i < park.length; i++) {
for (int j = 0; j < park[i].length(); j++) {
parkMap[i][j] = park[i].charAt(j);
if (parkMap[i][j] == 'S') {
startI = i;
startJ = j;
}
}
}
for (String route : routes) {
String[] temp = route.split(" ");
String direction = temp[0];
int length = Integer.parseInt(temp[1]);
if (isValid(parkMap, direction, length, startI, startJ)) {
switch (direction) {
case "E":
startJ += length;
break;
case "W":
startJ -= length;
break;
case "S":
startI += length;
break;
case "N":
startI -= length;
break;
default:
return null;
}
}
}
return new int[]{startI, startJ};
}
public boolean isValid(char[][] parkMap, String direction, int length, int i, int j) {
switch (direction) {
case "E":
if (j + length < 0 || j + length >= parkMap[0].length) {
return false;
}
while (length-- > 0) {
if (parkMap[i][++j] == 'X') {
return false;
}
}
break;
case "W":
if (j - length < 0 || j - length >= parkMap[0].length) {
return false;
}
while (length-- > 0) {
if (parkMap[i][--j] == 'X') {
return false;
}
}
break;
case "S":
if (i + length < 0 || i + length >= parkMap.length) {
return false;
}
while (length-- > 0) {
if (parkMap[++i][j] == 'X') {
return false;
}
}
break;
case "N":
if (i - length < 0 || i - length >= parkMap.length) {
return false;
}
while (length-- > 0) {
if (parkMap[--i][j] == 'X') {
return false;
}
}
break;
default:
return false;
}
return true;
}
}
둘만의 암호 (연습문제) (0) | 2023.04.28 |
---|---|
바탕화면 정리 (연습문제) (0) | 2023.04.28 |
달리기 경주 (연습문제) (0) | 2023.04.28 |
개인정보 수집 유효기간 (2023 KAKAO BLIND RECRUITMENT) (0) | 2023.04.28 |
추억 점수 (연습문제) (0) | 2023.04.28 |
댓글 영역