Leetcode Java Decoded String at Index
업데이트:
문제
코드
class Solution {
public String decodeAtIndex(String s, int k) {
int i = 0;
long n = 0;
for (; n < k; i++) {
if (Character.isDigit(s.charAt(i))) {
n *= s.charAt(i) - '0';
} else {
n++;
}
}
while (--i > 0) {
if (Character.isDigit(s.charAt(i))) {
n /= s.charAt(i) - '0';
k %= n;
} else {
if (k % n == 0) {
break;
} else {
n--;
}
}
}
return Character.toString(s.charAt(i));
}
}
결과
설명
- 아래의 규칙대로 만들어진 암호화된 문자열 s를 복호화 하였을 때, k번째 문자를 찾는 문제이다.
- 문자열 + 숫자의 반복으로 이루어진 s는, 앞의 문자열이 숫자만큼 반복되는 문자라는 의미이다.
- 예를 들어, “ab2cd3”를 복호화하면 “ababcdcdcd”가 된다.
- 문제 풀이에 필요한 변수를 정의한다.
- i는 문자열 s를 복호화 하였을 때 k번째 문자가 위치한 암호화된 문자의 위치를 저장할 변수로, 0으로 초기화한다.
- n은 k번째 문자를 탐색하기 위한 변수로, overflow를 방지하기 위해 long 형의 0으로 초기화한다.
- n이 k 미만일 때 까지 i를 증가시키며 아래를 반복한다.
- s의 i번째 문자가 숫자인 경우, n에 n과 해당 자리의 숫자를 곱한 값을 넣어준다.
- 위의 경우가 아니라면 문자이므로, n을 증가시킨다.
- 3번의 반복이 완료되면 i를 감소시키며 0 초과일 때까지 아래를 반복한다.
- s의 i번째 문자가 숫자인 경우, n에 n과 해당 자리의 숫자를 나눈 값을 넣어주고 k에 k와 n을 나눈 나머지 값을 넣어 반복된 문자열의 수만큼 감소시킨다.
- 위의 경우가 아니라면 k를 n으로 나눈 나머지가 0이면 위치 탐색이 완료되었으므로 반복을 중지하고, 아니면 n을 감소시킨다.
- 반복이 완료되면 문자열 s의 i번째 문자를 문자열로 변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기