스킬 체크 테스트 Level.2 문제 2 Java 무한루프 문의드립니다.

조회수 245회
class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        int one = 0;
       while(s.length()>1){

           for(int i=0; i<s.length();i++){
               if(s.charAt(i)=='0')
                 answer[1]++;  
               else 
                   one++;
           }
           s = Integer.toBinaryString(one);
           answer[0]++;
       }

        return answer;
    }
}

실행하기를 하면 "테스트2"를 제외한 나머지는 모두 시간 초과로 나옵니다. 이유를 잘 모르겠습니다. 답변을 주신 선생님들께 감사드립니다.

1 답변

  • 스킬 체크 테스트는 응시할 때마다 문제가 바뀌는 걸로 알고 있어서, 문제 2번이라고 말씀해 주시면 어떤 문제인지 알기 어렵습니다. 문제의 제목을 적어 주시면 답변하는 데에 도움이 됩니다!

    별개로, 추측하건데 이진수 문자열을 받아서 뭔가 동작을 수행하는 코드인 것 같습니다. Integer.toBinaryString은 이진수를 십진수로 바꿔 주는데요, s = Integer.toBinaryString(one);을 하고 있는 것으로 보여 one을 이진수로 나타낸 것을 s에 저장하고 있는 것 같습니다.

    while-루프의 진행 조건 s.length() > 1을 확인해 봅시다. 이렇게 될 조건은 Integer.toBinaryString(one)의 길이가 1 이상일 때이고, 다른 말로는 one의 이진수 표현이 1 이상일 때입니다. 따라서, one이 2 이상, 즉 이진수로 10(2) 이상이라면 while이 계속 진행될 겁니다.

    그런데 while 루프에서 one가 감소되는 부분이 없습니다. one은 증가하기만 할 텐데요, 따라서 s.charAt(i) == '0'이 아닌 상황이 두 번 일어나면 그 이후부터는 s.length() > 1이 되어 무한히 돌 것입니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)