본문 바로가기
코딩테스트/Java

[Level2] JadenCase 문자열 만들기 답안 및 풀이

by SRin23 2021. 12. 21.

◇ 문제 설명

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

 

◇ 제한 조건

  • s는 길이 1 이상인 문자열입니다.
  • s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
  • 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

 

◇ 입출력 예시

s return
"3people unFollowed me" "3people Unfollowed Me"
"for the last week" "For The Last Week"

 

◇ 초기 내용

※ [출처] 프로그래머스-코딩테스트 연습-문제명

※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.

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

 


◇ 풀이 과정

문제의 풀이과정은 이러했다. 

  1. s문자열의 내용을 answer로 복사한다.
  2. answer의 영어를 모두 소문자로 변환한다.(이후 코드의 편의를 위해)
  3. 띄워쓰기가 된 부분을 확인할 변수 check를 선언한다.
  4. 반복문을 돌리며 띄워쓰기가 된 부분을 찾은 후 check를 -1로 바꾸어준다.
  5. 띄워쓰기 다음의 단어(check == 0)를 찾으면 그 문자에 32를 빼어, 소문자를 대문자로 변환시킨다.
    (대문자 아스키 코드 + 32 = 소문자 아스키 코드)
  6. 문자가 반복될때마다 check를 1씩 증가한다.(띄워쓰기 확인을 위해)

 

◇ 참고사항

첫번째, Java에서 String 문자열 각 요소에 접근하는 방법은 str.charAt(인덱스번호)이다.

 

두번째, toUpperCase와 toLowerCase메소드를 이용하여 영문자를 각각 대문자, 소문자로 변환시킬 수 있지만 영문자가 아닌 문자가 포함될 시 변환되지 않는다.

<사용방법> str.toUpperCase() / str.toLowerCase()

 

세번째, isUpperCase와 isLowerCase메소드를 사용하여 현재 문자가 대문자인지 소문자인지 boolean형을 통해 알아볼 수 있다. isUpperCase에서는 소문자, 숫자, 한글 모두 false로 인식하며 isLowerCase도 이와 같다.

<사용방법> Character.isUpperCase(str) / Character.isLowerCase(str)

 

네번째, char형 배열을 String형으로 만드는 방법 중 하나는 char배열을 String 변수 생성자의 인수로 작성하는 것이다.

<사용방법> String str = new String(cArray);

 

◇ 답안

더보기
더보기
더보기
더보기
class Solution {
    public String solution(String s) {
        String answer;
        
        //문자열 s를 char배열로 받을 temp배열 s.length만큼 선언 
        char temp[] = new char[s.length()];
        
        for(int i = 0; i<s.length(); i++){
            //s의 각 문자를 temp배열에 저장
            //대문자라면 소문자로 바꿔서 temp 배열에 저장
            if(s.charAt(i)>='A'&&s.charAt(i)<='Z'){
                temp[i] = (char)(s.charAt(i)+32);
            }else{
                temp[i] = s.charAt(i);
            }
            
            //temp배열 속 문자 확인
            //System.out.println(temp[i]);
        }
        
        //띄워쓰기를 체크하는 변수 선언
        int check = 0;
        for(int i = 0; i<temp.length; i++){
            //띄워쓰기시, check는 -1
            if(temp[i]==' '){
                check = -1;
            }
            //띄워쓰기된 바로 뒤 글자는 단어의 첫문자
            if(check==0){
                //단어의 첫 문자가 조건에 맞게 잘 들어왔는지 확인
                //System.out.println(temp.charAt(i));
                
                //temp배열에 담을 때 모두 소문자로 변환했으므로 소문자만 조건체크
                //단어의 첫번째 문자가 영문일때
                if(temp[i]>='a'&&temp[i]<='z'){
                    //소문자를 대문자로 변환(소문자아스키코드 - 32 = 대문자아스키코드)
                    temp[i]-=32;
                    //잘 변환되었는지 확인
                    //System.out.println(temp[i]);
                }
            }
            //한 글자마다 check + 1
            check++;
        }
        //answer의 생성자를 이용하여 temp를 String으로 변환
        answer = new String(temp);
        return answer;
    }
}

 

◇ 실행결과

JadenCase 문자열 만들기 실행결과

 

◇ 출처

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

댓글