자바 알고리즘 기초
JAVA 기초 알고리즘 - 공원 산책 (String 값을 비교할 땐 equals)
들쮜
2023. 5. 1. 17:21
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;
}
}