Leetcode Java Move Pieces to Obtain a String
업데이트:
문제
코드
class Solution {
public boolean canChange(String start, String target) {
char[] startCharArray = start.toCharArray();
char[] targetCharArray = target.toCharArray();
int length = targetCharArray.length;
int i = 0;
int j = 0;
while (i <= length && j <= length) {
while (i < length && targetCharArray[i] == '_') {
i++;
}
while (j < length && startCharArray[j] == '_') {
j++;
}
if (i == length || j == length) {
return i == length && j == length;
}
if (targetCharArray[i] != startCharArray[j]) {
return false;
}
if (targetCharArray[i] == 'L') {
if (j < i) {
return false;
}
} else {
if (i < j) {
return false;
}
}
i++;
j++;
}
return true;
}
}
결과
설명
- ‘L’, ‘R’, ‘_’ 문자로 이루어진 문자열 start를 target으로 변경 가능한지 검증하는 문제이다.
- 문자 ‘L’, ‘R’은 왼쪽과 오른쪽 방향을 뜻하며, 각 방향에 빈 공간인 ‘_’ 문자가 존재해야 해당 방향으로 이동 가능하다.
- 문제 풀이에 필요한 변수를 정의한다.
- startCharArray와 targetCharArray는 start와 target을 문자 배열로 변환한 변수이다.
- length는 target의 길이를 저장한 변수이다.
- i와 j는 target과 start의 위치를 저장할 변수로, 둘 다 0으로 초기화한다.
- i와 j가 length 이하일 때 까지 아래를 반복한다.
- i가 length 미만이면서 targetCharArray[i] 문자가 ‘_‘인 이동 가능할 때 까지 i를 증가시켜 이동 가능한 마지막 위치로 이동시킨다.
- j가 length 미만이면서 startCharArray[j] 문자가 ‘_‘인 이동 가능할 때 까지 j를 증가시켜 이동 가능한 마지막 위치로 이동시킨다.
- i 혹은 j가 length에 도달하는 경우, i와 j가 마지막 위치인지 여부를 주어진 문제의 결과로 반환한다.
- targetCharArray[i] 문자와 startCharArray[j] 문자가 다른 변경이 불가능한 경우, false를 주어진 문제의 결과로 반환한다.
- targetCharArray[i] 문자가 ‘L’이면서 j가 i 미만인 변환이 불가능한 경우, false를 주어진 문제의 결과로 반환한다.
- targetCharArray[i] 문자가 ‘R’이면서 i가 j 미만인 변환이 불가능한 경우, false를 주어진 문제의 결과로 반환한다.
- i와 j를 증가시켜 다음 위치로 이동시킨다.
- 반복이 완료되어 변환이 가능한 경우, true를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기