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;
}
}
'자바 알고리즘 기초' 카테고리의 다른 글
JAVA 기초 알고리즘 - [프로그래머스] 과제 진행하기 (여러 값을 가진 리스트? 객체 만들기! + stack) (1) | 2023.05.09 |
---|---|
JAVA 기초 알고리즘 - [프로그래머스] 요격 시스템 (정렬은 Arrays.sort()이고, overriding이 가능하다) (0) | 2023.05.01 |
JAVA 기초 알고리즘 - 개인정보 수집 유효기간 (문자열 split 사용으로 배열로 바꾸기) (0) | 2023.04.30 |
JAVA 기초 알고리즘 - 추억 점수 (Arrays.asList.indexOf()) (0) | 2023.04.29 |
JAVA 기초 알고리즘 - [프로그래머스] 달리기 경주 (자바의 딕셔너리 Map) (0) | 2023.04.29 |