[알고리즘/프로그래머스] 12930. 이상한 문자 만들기

jae_s_a·2022년 9월 23일
0

프로그래머스

목록 보기
4/26

문제

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


이상한 문자 만들기

문제 설명

  • 문자열 s는 한 개 이상의 단어로 구성되어 있습니다.

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

  • 제한사항

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

image

  • 입출력 예 설명

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

백준에 비해 프로그래머스가 테스트케이스 통과하기 더 어려운 것 같다.

class Solution {
    public String solution(String s) {
        String answer = "";    
        String space = "";
        
        int cnt = 0;
        
        for(int i = 0; i < s.length(); i++) {
            cnt++;
            if(s.charAt(i) == ' ') {
                space += " ";
                cnt = 0;
            }         
            else if(cnt % 2 == 1) {
                answer += space + ((s.charAt(i) + "").toUpperCase());
                space = "";
            } else {
                answer += space + ((s.charAt(i) + "").toLowerCase());
                space = "";
            }
        } 
        return answer;
    }
}

위에 작성한 코드를 쓰기전에 홀수인 경우에만 ASCII로 대문자 처리를 해주었는데도 모든 테스트케이스가 실패해서 팀원에게 도움을 요청했더니 대문자/소문자 각각 처리해주어야 한다고 해서 toLowerCase/toUpperCase로 대소문자 처리를 해준 코드이다.

그러나 위 코드도 테스트케이스를 전부 성공하지 못했는데 그 이유가 단어가 없는 경우에는 띄어쓰기(String space)를 해주지 않도록 구현을 했기 때문인 것 같았다.

테스트케이스까지 추가해줬었는데 결국 대소문자 때문이었다.

image

toLowerCase/toUpperCase 처리해준 이후에 5분도 안돼서 통과가 됐지만 이 부분이 문제가 될 지는 상상도 못했다...

class Solution {
    public String solution(String s) {
        String answer = "";  
        
        int cnt = 0;
        
        for(int i = 0; i < s.length(); i++) {
            cnt++;
            if(s.charAt(i) == ' ') {
                answer += " ";
                cnt = 0;
            }         
            else if(cnt % 2 == 1) {
                answer += (s.charAt(i) + "").toUpperCase();
            } else {
                answer += (s.charAt(i) + "").toLowerCase();
            }
        } 
        return answer;
    }
}
profile
if not now, when

0개의 댓글