스킬 체크 테스트 Level.2 문제 2 Java 무한루프 문의드립니다.
조회수 102회
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
이 되어 무한히 돌 것입니다.
댓글 입력