[프로그래머스] 22 : JadenCase 문자열 만들기 | 이진 변환 반복하기

서예진·2024년 2월 14일
0
post-custom-banner

목차📕

▸ JadenCase 문자열 만들기
▸ 이진 변환 반복하기


💡JadenCase 문자열 만들기 : Lv.2

▼ 문제

출처: 프로그래머스 코딩테스트 연습 > 연습문제 > JadenCase 문자열 만들기

▼ 내 풀이

  • 우선 전달받은 문자열을 전체 소문자로 바꾸고 split 메서드를 활용하여 전달받은 문자열을 분리해준다.
  • 반복문을 돌면서 if문을 활용하여 JadenCase 문자열 로직을 만들었다.
[오답 코드]
class Solution {
    public String solution(String s) {
        String answer = "";
        String str = s.toLowerCase();
        String[] words = str.split(" ");
        
        for(int i = 0; i < words.length; i++){
            String tmp = "";
            char[] ch = words[i].toCharArray();
            ch[0] = Character.toUpperCase(ch[0]);
            for(int j = 0; j < words[i].length();j++){
                tmp += ch[j];
            }
            words[i] = tmp;
        }
        answer = String.join(" ", words);
        return answer;
    }
}
  • 위의 코드를 돌리니 런타임 에러와 실패가 떴다.
  • 실패와 에러의 원인은 공백문자가 연속일 경우를 고려하지 않아서인 것 같다. 또한, 전달받은 문자열의 마지막이 공백문자일 경우도 있다.
  • 따라서 아래와 같이 수정했다.
[수정 코드]
class Solution {
    public String solution(String s) {
        String answer = "";
        String str = s.toLowerCase();
        String[] words = str.split(" ");
        
        for(int i = 0; i < words.length; i++){
            if(words[i].length() == 0){
                answer += " "; // 단어가 공백일 경우 반환값에 공백 더하기
            }else{
                answer += words[i].substring(0,1).toUpperCase();
                answer += words[i].substring(1);
                answer += " ";
            }
        }
        //전달받은 문자열 마지막이 공백일 경우
        if(s.substring(s.length() -1, s.length()).equals(" ")) return answer;
        
        //전달받은 문자열 마지막이 공백이 아닐경우 마지막 공백은 제외해야함
        return answer.substring(0, answer.length() - 1);
    }
}

▼ 알게된 점

  • split(" ")을 사용하면 연속된 공백도 분할되어 빈 문자열로 간주된다.

💡이진 변환 반복하기 : Lv.2

▼ 문제

출처: 코딩테스트 연습 > 월간 코드 챌린지 시즌1 > 이진 변환 반복하기

▼ 내 풀이

  • 먼저, 전달받은 문자열에서 if-else문을 활용하여 "0"이 아닌 부분만 따로 다른 문자열을 만들었다. 이때, stringbuilder를 활용했다.
  • 여기서 출현하는 "0"의 수를 셀 수 있다.
  • Integer.toBinaryString() 메서드를 활용했다.
  • binary가 구해지면 s에 binary를 초기화하고 count++한다.
  • 이때, while문을 도는 조건은 s가 "1"이 아닌 경우이다.
class Solution {
    public int[] solution(String s) {
        int count = 0; 
        int zeroCount = 0;
        
        while(!s.equals("1")){
            StringBuilder result = new StringBuilder();
        
            // 0 제외 문자열 만들기
            for(int i = 0; i < s.length(); i++){
                char ch = s.charAt(i);
                if (ch != '0'){
                    result.append(ch);
                } else{
                    zeroCount ++;
                }
            }
            String output = result.toString();
            int size = output.length();
            
            //이진변환
            String binary = Integer.toBinaryString(size);   
            s = binary;
            count++;
        }
        
        int[] answer = new int[2];
        answer[0] = count;
        answer[1] = zeroCount;
        return answer;
    }
}

▼ 알게된 점

💡String binary = Integer.toBinaryString(바꾸고자 하는 숫자);

  • toBinaryString 함수는 어떤 숫자를 2진수 문자열로 바꿔주는 함수
  • 주의❗️: 이 함수의 결과값은 String이다.
profile
안녕하세요
post-custom-banner

0개의 댓글