본문 바로가기

programmers-코딩테스트 연습/Level 1. 자바

2021-06-09 / 이상한 문자 만들기

문제 설명

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

 

제한 사항

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

입출력 예

s return
"try hello world" "TrY HeLlO WoRlD"

 

입출력 예 설명

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

 

초기 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        return answer;
    }
}

 

정답 코드

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

        int cnt=0;  //단어 인덱스 번호
        
        for(int i=0; i<str.length; i++){
            if(str[i].equals(" ")){ //공백인 경우
                cnt=0;
            }
            else {
                if(cnt%2==0){
                    cnt++;
                    str[i]=str[i].toUpperCase();
                }
                else{
                    cnt++;
                    str[i]=str[i].toLowerCase();
                }
            }
            answer+=str[i];
        }
        return answer;
    }
}

 

코드 설명

split 

특정 문자열을 기준으로 문자열을 자르는 것 / 우리는 s문자열을 공백을 기준으로 단어를 나눠야 한다. 따라서 

s.split(" ")이라고 쓴다.

 

equals()

equals() 메소드는 객체끼리 내용을 비교한다. 우리는 굳이 왜 ==을 두고 equals를 써야하는지 잘 모를 수도 있지만 실제로 ==을 쓰게 되면 정확도가 처참하게 나오는 것을 확인할 수 있다. 그 이유는 ==는 주소값을 비교하기 때문이다. 조건문에서 공백과 str[i]를 비교한 이유는 만약 공백일 경우에는 cnt를 0으로 주어 초기화를 시킨 후 다시 단어를 0부터 하나씩 비교해야하기 때문이다.

즉 공백이 지나고 새로운 단어가 나올 때마다 단어의 인덱스 방을 바꿔준다.

 

toUpperCase() 

특정 문자를 대문자로 바꿔줄 때 사용한다.

toLowerCase() 

특정 문자를 소문자로 바꿔줄 때 사용한다.

 

전체적인 로직

1) 문자열을 공백을 기준으로 나눠준다

2) 반복문을 단어의 수대로 돌린다.

3) 공백인 경우를 찾아 인덱스를 0으로 바꿔준다.

4) 단어가 홀수일 때, 짝수일 때를 구분하여 대문자와 소문자로 바꿔준다.

 

 

 

코딩테스트 연습 - 이상한 문자 만들기

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

programmers.co.kr