알고리즘 문제 풀이

<알고리즘 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 중 변화되는 것만 작성해야하는 이유는, 

변화되지 않는 인덱스까지 적으면 그 인덱스가 디폴트로 되므로 실제 이동이 전혀되지 않는다.