프로그래머스

프로그래머스99클럽 코테 스터디 13일차 TIL 이진 변환 반복하기(String문자열의 비교)

리콜 2024. 4. 10. 21:20

 

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

0과 1로 이루어진 이진수의 string s가 주어지고 이진수에서 0을 빼고 1만 남겼을때 s의 길이를 이진수로 만든뒤

다시 반복하여 1이 되게 할때 까지 몇번 반복했는지와 사라진 0의 갯수를 return하는 문제이다.

 

 

 

for문을 이요해서 charAt으로 1이라면 수를 증가시키도 0이라면 답의 0의 갯수를 증가 시키는 방식으로 while문으로 조건을 걸어 첫번째 코드를 작성하였는데 계속 무한으로 걸렸다.

 

 

첫번째 코드

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        while(s != "1"){
            answer[0]++;
            int n = 0;
            for(int i = 0 ; i< s.length(); i++){
                if(s.charAt(i) == '1'){
                    n++;
                }else{
                    answer[1]++;
                }
            }
            s = Integer.toBinaryString(n);
        }
        
        
        return answer;
    }
}

 

 

알고보니 자바에서 String을 비교할때에는 ==을 사용하면 안된다.

==을 사용하면 같은 참조인지 확인하는 식이 되버리기때문에 의도와 다른 식이되어 버린다.

따라서 equals함수를 사용하여 비교를 해야한다.

 

class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        while(!s.equals("1")){
            answer[0]++;
            int n = 0;
            for(int i = 0 ; i< s.length(); i++){
                if(s.charAt(i) == '1'){
                    n++;
                }else{
                    answer[1]++;
                }
            }
            System.out.println(Integer.toBinaryString(n));
            s = Integer.toBinaryString(n);
        }
        
        
        return answer;
    }
}

 

 

반응형