[프로그래머스] 이상한 문자 만들기

진예·2023년 12월 22일
0

Programmers

목록 보기
19/45
post-thumbnail

📌 문제

Lv1. 이상한 문자 만들기

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

✔️ 제한 사항

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

✏️ 입출력

  • 입출력 예 설명
    : "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

💡 코드

❌ 문자열 s의 문자들을 toLowerCase()를 통해 모두 소문자로 변환한 후, 짝수 인덱스toUpperCase()로 바꿀 수 있도록 로직을 짜보았다.

split(" ")을 통해 문장을 공백 단위로 잘라서 각 단어들을 배열 word[]에 담아주고, 각 단어를 다시 split("")으로 한 문자씩 잘라서 배열 str[]에 담아 단어별로 각 문자의 인덱스가 짝수이면 대문자로 변환해주었다. 변환 작업이 끝나면 String 클래스의 join(구분자, 배열)을 사용하여 String 타입의 배열문자열로 간단하게 만들 수 있다! 해당 작업을 모든 단어에 끝낸 후 최종적으로 String.join(" ", word)를 리턴해주면 word[]의 각 단어를 공백을 기준으로 결합해서 최종 문장을 리턴할 수 있다.

아래 코드로 테스트 케이스는 통과했는데, 어째서인지 실제 제출에서는 몇 개의 케이스에서 실패가 떴다,,

class Solution {
    public String solution(String s) {
        
        s = s.toLowerCase();
        String[] word = s.split(" ");

        for(int i=0;i<word.length;i++) {
            String[] str = word[i].split("");
            
            for(int j=0;j<str.length;j++) {
                if(j%2 == 0) str[j] = str[j].toUpperCase();
            }
            
            word[i] = String.join("", str);
        }
        
        return String.join(" ", word);
    }
}

✅ 다른 사람들의 질문들과 코드를 보니, 문장의 가장 앞 뒤에 공백이 들어가거나, 공백이 하나 이상인 경우에는 공백 자체를 문자열로 취급해서 리턴해줘야 한다고 한다. 예를 들어, s" aaa "인 경우, 공백을 포함해서 " AaA "를 리턴해야 한다.

위 코드처럼 split(" ")로 문자열을 분리하면 공백을 모두 제거하므로 단어 aaaword[]에 담겨서 제대로 된 문장을 리턴할 수 없게 된다. split(" ")한계치로 -1을 넣어줌으로써 해결할 수 있었다 : split(" ", -1). 한계치에 -1을 넣으면 분할 수에 제한이 없으므로, 공백을 기준으로 최대한 많이 분할할 수 있게 되어 공백또한 분할 대상에 포함되는 것이다.

class Solution {
    public String solution(String s) {
        
        s = s.toLowerCase();
        String[] word = s.split(" ", -1);

        for(int i=0;i<word.length;i++) {
            String[] str = word[i].split("");
            
            for(int j=0;j<str.length;j++) {
                if(j%2 == 0) str[j] = str[j].toUpperCase();
            }
            
            word[i] = String.join("", str);
        }
        
        return String.join(" ", word);
    }
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글