자바 연속되는 숫자 구하기 알고리즘에 대한 질문입니다.
조회수 2102회
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
in.close();
int sum = 0, max = 0;
while (n > 0) {
if (n % 2 == 1) {
sum++;
if (sum > max) {
max = sum;
}
} else {
sum = 0;
}
n = n / 2;
}
System.out.println(max);
}
n = n / 2; 이거 왜 들어가는건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
위 그림은 10진수를 2진수로 변환하는 예시 입니다. 궁금해하시는 부분은 2로 나눈 나머지를 체크 한 후 2로 나누어 다음 루프를 실행하기 위한 코드 이구요.
if (n % 2 == 1) { //2로 나눈 나머지 sum++; if (sum > max) { max = sum; } } else { sum = 0; } n = n / 2; // 2로 나누기
만약 n=n/2 가 없으면 계속해서 입력값 그대로 유지될테니 while 문 (n>0) 조건에 걸려서 무한루프를 돌겠죠? n%2 에서 입력값이 2로 나눈 값으로 갱신 될것으로 혼동 되신게 아닌가 싶네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력