Leetcode Java Number of Steps to Reduce a Number in Binary Representation to One
업데이트:
문제
코드
class Solution {
public int numSteps(String s) {
int result = 0;
int carry = 0;
for (int i = s.length() - 1; i > 0; i--) {
result++;
if (s.charAt(i) - '0' + carry == 1) {
carry = 1;
result++;
}
}
return result + carry;
}
}
결과
설명
- 이진법 문자열 s를 이용하여 아래 규칙에 따라 1로 감소시키기 위한 횟수를 구하는 문제이다.
- 현재 숫자가 짝수이면 2로 나눈다.
- 현재 숫자가 홀수이면 1을 더한다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 횟수를 저장할 변수로, 0으로 초기화한다.
- carry는 증가하는 값을 저장할 변수로, 0으로 초기화한다.
- s의 길이보다 1 작은 값부터 0 초과일 때까지 i를 감소시키며 아래를 반복한다.
- 값이 짝수/홀수인지 여부를 제외하고 한 번을 수행하므로 result를 증가시킨다.
- s의 i번째 문자를 숫자로 변환한 값과 carry를 더한 값이 1인 홀수인 경우 두 번 수행하므로, carry에 1을 넣어주고 result를 증가시킨다.
- 홀수인 경우, 1을 증가시키고 짝수를 만들어 2를 나누므로 2번 수행한다.
- 반복이 완료되면 마지막 이전까지 계산된 수행 횟수인 result와 carry가 1인 경우 다시 2로 나누어야 하므로 carry를 더한 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기