본문 바로가기
Language/Java

[Programmers | Java | 연습문제 풀이] 이상한 문자 만들기 - Solution with toLowerCase() & char 비교 및 연산

by ㅇ달빛천사ㅇ 2024. 7. 6.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기  |  Algorithm CODEKATA

➿ 이상한 문자 만들기


🏷 관련 주제 : String toLowerCase() char String Builder




✔️ Solution with String

class Solution {
    public String solution(String s) {
        String answer = "";
        int d = (int)'A' - (int)'a';
        s = s.toLowerCase();
        int idx = 0;
        
        
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            
            if (c == ' ') {
                answer += c;
                idx = 0;
            } else {
                if (idx % 2 == 0) {
                    answer += (char)(c + d);
                } else {
                    answer += c;
                }
                idx++;
            }
            
        }
        
        return answer;
    }
}
채점 결과

✔️ Solution with String Builder

import java.lang.StringBuilder;

class Solution {
    public String solution(String s) {
        StringBuilder sb= new StringBuilder();
        s = s.toLowerCase();
        sb.append(s);
        int[] idx = new int[2];
        int d = 'A' - 'a';
        
        for (char c : s.toCharArray()) {
            if (idx[1] % 2 == 0) {
                sb.setCharAt(idx[0], (char)(c + d));
            }

            idx[0]++;
            idx[1]++;
            
            if (c == ' ') {
                idx[1] = 0;
            }
        }
        
        
        String answer = sb.toString().replace("\u0000", " ");
        
        return answer;
    }
}
채점 결과

✔️ Solution with char[]

class Solution {
    public String solution(String s) {
        char[] cArr = s.toLowerCase().toCharArray();
        int idx = 0;
        int d = 'A' - 'a';
        
        for (int i = 0; i < cArr.length; i++) {
            char c = cArr[i];
            
            if (idx % 2 == 0) {
                cArr[i] = (char)(c + d);
            }

            idx++;
            
            if (c == ' ') {
                idx = 0;
            }
        }
        
        
        String answer = String.valueOf(cArr).replace("\u0000", " ");
        
        return answer;
    }
}
채점 결과


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제 : 문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.


문자열을 담을 자료형을 세가지로 문제를 풀어보았다.

1. String 사용한 방법

먼저 문자열 stoLowerCase()메서드로 모두 소문자로 변환 후,
반복문을 통해 문자열 si인덱스의 char를 가져와서
또다른 인덱스 idxs.charAt(i) == ' ' 일 때, 0으로 초기화 하면서
idx짝수인 문자를 대문자로 변환하여 answer에 추가하고
홀수인 문자는 그대로 answer에 추가하여
반복문이 끝나면 answer을 반환하여 문제를 풀었다.

근데 실행시간이 오래 걸려서 별로인 것 같다.


2. String Builder을 이용했다.

문자열 stoLowerCase()로 모두 소문자로 변환 후, String Builder sbappend()메서드로 담았다.
그리고 반복문을 돌면서 각 단어의 짝수번째 인덱스의 문자setCharAt()메서드로 대문자로 수정해 주었다.

그런데 내가 참고한 블로그의 설명에는
String BuildersetCharAt()메서드의 두번째 매개변수가 String 타입으로 되어 있던데
그렇게 하니 계속 에러가 나서
char 타입으로 주니 에러가 사라졌다.
아무래로 setCharAt() 메서드의 두번째 매개변수char 타입으로 주어야 하는 것 같다.

그리고 마지막으로 모든 글자를 수정 후,
toString()메서드로 answer에 변환한 문자열을 담아 반환하였다.


3. char[]을 이용한 방법

문자열 stoLowerCase()로 모두 소문자로 변환 후,
toLowerCase()메서드로 char[]타입으로 변환하여 cArr에 담아주었다.
그리고 반복문을 돌면서 앞의 방법과 동일한 방법으로 각 단어의 짝수 인덱스의 문자를 대문자로 변환해 주었고
반복문이 끝나면 String.valueOf()메서드로 char[]String으로 변환하여 answer에 담아 반환하였다.

String.valueOf()메서드로 char[] to String 변환이 가능하다는 것을 예전에 봐서 알고 있었는데
오늘 사용하려고 보니 정확히 어떤 메서드였는지 잊어버려서
구글링을 통해 다시 찾아 보고나서야 String.valueOf()메서드 였다는 것이 기억났다.
다음번에 필요할 때는 잊지 않고 사용할 수 있었으면 좋겠다.

💬 무엇을 새롭게 알았는지

String을 다루는 코드를 많이 써 보았습니다.
String Builder 클래스를 다루어 보았습니다.
char끼리 비교 및 연산하는 코드를 작성해 보았습니다.
char[]String.valueOf()를 하면 String 타입으로 변환된다는 것을 알았습니다.


📚 References(참고 자료)







728x90


Top