문제 풀이: 이중 배열의 랜덤 엑세스
이중 배열 전체에 엑세스하지 않고 랜덤 엑세스로 필요한 Element만 참조합니다(상, 하, 좌, 우).
이때 엑세스 포인트가 배열의 크기를 넘어서는 경우에 대한 예외 처리가 필요합니다.
class Solution {
public int solution(String[][] board, int h, int w) {
String l = (0 <= w - 1) ? board[h][w -1] : "";
String r = (w + 1 < board[0].length) ? board[h][w + 1] : "";
String t = (0 <= h - 1) ? board[h -1][w] : "";
String b = (h + 1 < board.length) ? board[h + 1][w] : "";
int answer = 0;
if (0 == l.compareTo(board[h][w])) ++answer;
if (0 == r.compareTo(board[h][w])) ++answer;
if (0 == t.compareTo(board[h][w])) ++answer;
if (0 == b.compareTo(board[h][w])) ++answer;
return answer;
}
}
코드 | 비고 | |
이중 배열의 각 엑세스 포인트는 |
||
기준이 되는 Element와 비교합니다. |
문제 풀이: 엑세스 포인트를 배열로 구성, 공통 로직으로 문제를 해결
엑세스가 필요한 좌표를 배열로 미리 구성하고 이를 루프하면 공통 로직으로 문제를 해결 할 수 있습니다.
class Solution {
public int solution(String[][] board, int h, int w) {
int[] dh = { 0, 0, -1, 1 };
int[] dw = { -1, 1, 0, 0 };
int answer = 0;
for (int i = 0; i < 4; ++i)
{
int cw = w + dw[i];
int ch = h + dh[i];
if (0 > cw ||
0 > ch ||
cw > board[0].length ||
ch > board.length) continue;
if (0 == board[ch][cw].compareTo(board[h][w]))
++answer;
}
return answer;
}
}
코드 | 비고 | |
'Algorithm > Programmers' 카테고리의 다른 글
Level 2: PCCP 기출문제 - 석유 시추, BFS 알고리즘 (0) | 2023.12.04 |
---|---|
Level 1: PCCP 기출 문제 - 데이터 분석, Stream 필터와 정렬 (0) | 2023.12.04 |
Level 1: PCCP 기출문제 - 붕대 감기, 시간 경과에 따른 로직 계산 (0) | 2023.12.04 |
Level 1: 둘만의 암호, 임의의 ASCII 코드 연산을 모킹하여 풀이 (0) | 2023.11.30 |
Level 1: 예산, 배열의 오름차순 정렬 (0) | 2023.11.30 |