알고리즘 문제 풀이
<알고리즘 Q3 - 구현> 보드 게임 // equals() vs ==
DvdHan
2022. 11. 28. 00:58
=============해답========================
public class Solution {
public Integer boardGame(int[][] board, String operation) {
/*
2차원 배열 board, 명령문 집합 operation.
시작 포인트 0,0 고정.
<주의사항>
보드 밖으로 나가면 즉시 null.
<풀이>
1. U, D, R, L 일 경우 변경되는 점 정리
2. board[i][j]에서 i, j가 음수가 되면 무조건 null return.
*/
// 점수들의 합계가 될 변수.
int score = 0;
// String 타입의 operation에 명령문 U,D,L,R 이 있으므로
// 각각의 문자들을 문자형 배열로 변환함.
char[] dir = operation.toCharArray();
// 출발 지점은 board[0][0] 이므로 출발점을 정해줌.
int x = 0;
int y = 0;
// dir의 요소별로 명령문이 있으므로 인덱스 관리를 위해 반복문 선언.
for (int i = 0; i < dir.length; i++) {
// dir의 요소에 U이 있을 경우, 위로 이동하는게 배열상 board[x][y]에서 x-1이 되므로 작성.
if (dir[i] == 'U') {
x = x-1;
}
// dir의 요소에 D이 있을 경우, 위로 이동하는게 배열상 board[x][y]에서 x+1이 되므로 작성.
if (dir[i] == 'D') {
x = x+1;
}
// dir의 요소에 R이 있을 경우, 위로 이동하는게 배열상 board[x][y]에서 y+1이 되므로 작성.
if (dir[i] == 'R') {
y = y+1;
}
// dir의 요소에 L이 있을 경우, 위로 이동하는게 배열상 board[x][y]에서 y-1이 되므로 작성.
if (dir[i] == 'L') {
y = y-1;
}
// 주의사항에 x, y가 보드판을 벗어나면 즉시 null이라는 점으로
// x,y의 최소값 0,0 보다 아래거나 명령문의 길이를 벗어나면 보드판 벗어남으로 작성.
if (x < 0 || y < 0 || x >= dir.length || y >= dir.length) {
return null;
}
// 코드 흐름상 i가 dir.length까지 수행될때까지 점수를 누적하도록 작성.
score = score + board[x][y];
}
return score;
}
}
=======================참고사항============================
1. 배열에서 U, D, L, R 이 있을 경우를 나타낼 때는 배열명 == 'U' 로 사용한다.
equals()는 string/int 메소드로
System.out.println(비교대상_변수.equals(비교대상2_변수)); 로 사용하며, boolean 리턴이다.
2. String을 char[] 배열로 바꾸는 메소드는 String변수.toCharArray(); 이다.
3. U, D, L, R에서 해당하는 x or y 중 변화되는 것만 작성해야하는 이유는,
변화되지 않는 인덱스까지 적으면 그 인덱스가 디폴트로 되므로 실제 이동이 전혀되지 않는다.