Leetcode Java Push Dominoes
업데이트:
문제
코드
class Solution {
public String pushDominoes(String dominoes) {
char[] charArray = dominoes.toCharArray();
int index = -1;
char c = '.';
for (int idx = 0; idx < charArray.length; idx++) {
if (charArray[idx] == 'L') {
if (index == -1 || c == 'L') {
while (index < idx - 1) {
charArray[++index] = 'L';
}
} else if (c == 'R') {
int left = index + 1;
int right = idx - 1;
while (left < right) {
charArray[left++] = 'R';
charArray[right--] = 'L';
}
}
index = idx;
c = 'L';
} else if (charArray[idx] == 'R') {
if (c == 'R') {
while (index < idx - 1) {
charArray[++index] = 'R';
}
}
index = idx;
c = 'R';
}
}
if (c == 'R') {
while (index < charArray.length - 1) {
charArray[++index] = 'R';
}
}
return String.valueOf(charArray);
}
}
결과
설명
-
일렬로 세워둔 dominoes를 이용하여 좌측인 ‘L’과 우측인 ‘R’로 밀었을 때, 도미노가 쓰러진 형태를 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- charArray는 dominoes를 문자 배열로 변환하여 저장한 변수이다.
- index와 c는 위치와 문자를 저장하기 위한 변수로, -1과 ‘.’으로 초기화한다.
- 0부터 charArray의 길이 미만까지 idx를 증가시키며 아래를 반복한다.
- charArray의 idx번째 문자가 ‘L’인 경우, 아래를 수행한다.
- index가 -1이거나 c가 ‘L’인 경우, index가 $idx - 1$ 미만일 때 까지 index를 증가시키며 charArray의 index번째 위치에 ‘L’을 넣어 좌측으로 쓰러진 도미노의 값을 넣어준다.
- c가 ‘R’이면 left에 $index + 1$을, right를 $idx - 1$을, left가 right 미만까지 left를 증가시키며 charArray의 left번째 위치에 ‘R’을, right를 감소시키며 charArray의 right번쨰 위치에 ‘L’을 넣어 좌우로 도미노가 넘어지는 값을 넣어준다.
- index에 idx를 넣고, c에 ‘L’을 기록해준다.
- charArray의 idx번째 문자가 ‘R’인 경우, 아래를 수행한다.
- c가 ‘R’이면 index가 $idx - 1$ 미만까지 index를 증가시키며 charArray의 index번째 위치에 ‘R’을 넣어 오른쪽으로 쓰러진 도미노의 값을 넣어준다.
- index에 idx르 넣고, c에 ‘R’을 기록해준다.
- charArray의 idx번째 문자가 ‘L’인 경우, 아래를 수행한다.
-
c가 ‘R’인 경우, index가 charArray의 길이보다 1 작을 때 까지 반복하여 index를 증가시키며 charArray의 index번째 값에 ‘R’을 넣어 우측으로 쓰러진 도미노의 값을 넣어준다.
- 마지막으로 charArray를 문자열로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기