자바 연속되는 숫자 구하기 알고리즘에 대한 질문입니다.

조회수 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; 이거 왜 들어가는건가요?
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 연속되는숫자 구하기가 어떤 의미인지 정확히 모르겠네요.. 알 수 없는 사용자 2018.6.24 12:43
  • 숫자를 입력하면 그 수를 이진수로 바꿔서 1이 얼마나 연속되는지 구하는 알고리즘입니다ㅜㅠㅠ 제가 그 때 급해서 제대로 설명을 안했네요 ㅠㅠ 알 수 없는 사용자 2018.6.24 12:58

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로 나눈 값으로 갱신 될것으로 혼동 되신게 아닌가 싶네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아 그렇군요 ㅠㅠㅠ 네 제가 착각했어요 ㅠㅠ 친절한 답변 감사합니다!!! 알 수 없는 사용자 2018.6.24 13:29

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)