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

fsm12·2023년 7월 25일
0

프로그래머스

목록 보기
48/57
post-thumbnail

문제링크

문제 이해

[ 입력형태 / 조건 ]

s
문자열 | "3people unFollowed me" | s는 길이 1 이상 200 이하인 문자열, s는 알파벳과 숫자, 공백문자(" ")로 이루어짐, 숫자는 단어의 첫 문자로만 나옴, 숫자로만 이루어진 단어는 없음, 공백문자가 연속해서 나올 수 있음

[ 문제 ]

s를 JadenCase로 바꾼 문자열을 return
(JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열로 구성됨. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 써야함)

[ 풀이 ]

try 1)

StringTokenizer를 이용해 문자열을 하나씩 받아와서, 첫 문자면 숫자,대문자만 가능하게 뒤의 문자면 소문자만 가능하게 조건문을 달아 2중 반복문으로 구현하고자 했음
=> 공백문자가 연속해서 나올 수 있기 때문에 StringTokenizer를 이용하면 몇개의 공백이 중간에 들어가 있었는지 구분이 어려울 것이라 생각

try 2)

문자열 처음부터 끝까지를 보는 반복문 하나를 이용해 내부 조건문을 써서 해결하고자 했음
=> 공백 / 첫글자 / 마지막 글자 의 3가지 경우로 나누어 조건을 추가함




코드

> [성공] 1차 시도 : 구현

  • 생각한 풀이 그대로 구현
import java.util.*;

class Solution {
    public String solution(String s) {
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            if(c == ' '){
                sb.append(" ");
                first = true;
                continue;
            }
            
            if(first){
                if('a'<=c)
                   c -= 'a'-'A';
                sb.append(c);
                first = false;
                continue;
            }
            
            if(c<'a')
                c += 'a'-'A';
            sb.append(c);
        }
        return sb.toString();
    }
}

=> 코드의 효율성은 좋아보이지만, 깔끔하게 코드가 작성되진 못한 것 같다.



짚고 넘어가기

  • 아래의 두 출력문은 같은 결과를 출력해야 할 것 같지만, 아스키 코드로 계산하고 그 값을 문자값으로 넣었느냐 아니면 계산한 값 그대로를 출력하느냐의 차이가 있다.
char c = 'z' - 'A';
System.out.println(c); // 9
System.out.println('z' - 'A'); // 57
  • 만약 c에 대입하고 싶지 않다면 아래와 같이 작성하면 된다.
System.out.println((char)('z' - 'A')); // 9 



Tip : 문자형 변수에 문자끼리 계산한 결과 값을 넣고 출력하는 것과 바로 출력하는 경우는 다른 결과를 도출할 수도 있다.

0개의 댓글