본문 바로가기

알고리즘/프로그래머스

[프로그래머스]Lv.2 JadenCase 문자열 만들기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제

  • JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다.
  • 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고)
  • 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한사항

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

입출력 예제

설계과정

1. 입력받은 문자열을 공백 기준으로 하나씩 잘라서 배열에 넣는다.

 

2. 배열에 들어간 문자들을 각각 subString()을 사용해서 대소문자를 변경하여 answer에 넣는다.

 

3. 공백 처리를 마무리한다.

 

런타임 에러와 테스트 케이스 1개 실패로 계속해서 도전했다..결국 다른 사람의 힌트를 보고 완성했다. 이클립스에선 잘 나왔는데 프로그래머스는 채점 방식이 뭔가 있나보다. 


풀이과정

1. 입력받은 문자열을 공백 기준으로 하나씩 잘라 배열에 넣는다.

  • split() : 입력받은 정규표현식 또는 특정 문자를 기준으로 문자열을 나눠서 배열에 저장하여 리턴한다.

2. 문자열의 길이가 0이라면 answer에 " " 만 추가한다. 

  • 공백처리를 하는 과정이다. 문자가 존재하지 않다면 공백을 넣어준다.

3. 문자가 있다면 맨 첫번째 문자를 대문자로 바꿔서 answer에 넣는다.

  • substring(a, b) : a부터 b까지의 문자를 리턴한다.
  • toUpperCase() : 대문자로 바꿔준다.

5. 1번째부터 마지막 문자까지는 소문자로 바꿔서 answer에 넣는다.

  • toUpperCase() : 소문자로 바꿔준다.

6. answer에 " " 를 추가한다.

  • 단어 하나의 변환이 끝났으니 다음 단어로 넘어가기 전에 " " 를 넣어준다.

7. 입력받은 문자열의 마지막에 " "이 있으면 answer를 그대로 반환한다.

 

8. substring()을 통해 answer 맨 마지막에 " " 를 제외하고 출력한다.

 

9. 결과를 출력한다. 


답안소스

  • 프로그래머스
class Solution {
    public String solution(String s) {
        
        String[] str = s.split(" ");
        String answer = "";
        
        for(int i=0; i<str.length; i++) {
    		String now = str[i];
    		
    		if(str[i].length() == 0) {
    			answer += " ";
    		} else {
    			answer += now.substring(0, 1).toUpperCase();
    			answer += now.substring(1, now.length()).toLowerCase();
    			answer += " ";
    		}
    	}
        
        if(s.substring(s.length()-1, s.length()).equals(" ")){
    		return answer;
    	}
        
        return answer.substring(0, answer.length()-1);
    }
}