Leetcode Java Swap Adjacent in LR String
업데이트:
문제
코드
class Solution {
public boolean canTransform(String start, String end) {
char[] startCharArray = start.toCharArray();
char[] endCharArray = end.toCharArray();
int length = startCharArray.length;
int next = 1;
for (int idx = 0; idx < length; idx++) {
if (startCharArray[idx] == endCharArray[idx]) {
continue;
}
if ((startCharArray[idx] == 'R' && endCharArray[idx] == 'X')
|| (endCharArray[idx] == 'L' && startCharArray[idx] == 'X')) {
next = Math.max(next, idx + 1);
while (next < length && startCharArray[next] == startCharArray[idx]) {
next++;
}
if (next == length || startCharArray[next] != endCharArray[idx]) {
return false;
}
startCharArray[next] = startCharArray[idx];
} else {
return false;
}
}
return true;
}
}
결과
설명
- ‘L’, ‘R’, ‘X’ 로 이루어진 start를 아래의 규칙대로 변환되는 문자열이 end에 존재하는지 검증하는 문제이다.
- “XL”를 “LX”로 변환.
- “RX”를 “XR”로 변환.
- 문제 풀이에 필요한 변수를 정의한다.
- startCharArray는 start를 문자 배열로 변환하여 저장한 변수이다.
- endCharArray는 end를 문자 배열로 변환하여 저장한 변수이다.
- length는 startCharArray의 길이를 저장한 변수이다.
- next는 다음 위치를 지정할 위치 변수로, 처음 시작하는 0보다 큰 1로 초기화한다.
- 0부터 length까지 idx를 증가시키며 아래를 반복한다.
- startCharArray의 idx번째 문자와 endCharArray의 idx번째 문자가 동일한 경우, 다음 위치로 반복을 계속 수행한다.
- startCharArray의 idx번째 문자가 ‘R’이면서 endCharArray의 idx번째 문자가 ‘X’이거나 endCharArray의 idx번째 문자가 ‘L’이면서 startCharArray의 idx번째 문자가 ‘X’인 경우 아래를 수행한다.
- next에 next와 $idx + 1$ 중 큰 값을 넣어준다.
- next가 length 미만이면서 startCharArray의 next번째 문자가 startCharArray의 idx번째 문자와 동일할 때 까지 next를 계속 증가시킨다.
- next가 length와 동일한 마지막 위치거나 startCharArray의 next번째 문자가 startCharArray의 idx번째 문자가 달라 변환이 가능한 경우, false를 주어진 문제의 결과로 반환한다.
- startCharArray의 next번째 문자에 idx번째 문자를 넣어 확인한 문자를 제거한다.
- 위의 경우가 아니라면 변환 가능한 문자가 이어지므로, false를 주어진 문제의 결과로 반환한다.
- 반복이 완료되면 모든 변환 가능한 문자가 없으므로, true를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기