[프로그래머스] JadenCase 문자열 만들기 문제풀이 (Java)

ajufresh·2020년 7월 10일
0

프로그래머스

목록 보기
11/14
post-custom-banner

🔗 링크

코딩테스트 연습 - JadenCase 문자열 만들기


🧤 문제

문자열 s가 주어졌을 때,

공백을 기준으로 다음 문자는 대문자로, 그 뒤 문자는 소문자로 치환한 값을 구해야한다.


👀 예제로 문제 파악하기

입력 : s 3people unFollowed me

⇒ 3people Unfollowed Me

입력 : s for

⇒ For

입력 : s hello World

⇒ Hello World


😮 알고리즘 풀이 순서

  1. answer을 StringBuilder형으로 선언해준다.
    • 문자열을 더하는 작업을 하기 때문이다.
  2. 첫 글자는 무조건 대문자이기 때문에 대문자로 만들어서 answer에 더해준다.
  3. s의 길이만큼 반복문을 돈다.
    • 현재 문자가 공백이면 공백을 answer에 더해준다.
    • 전 문자열이 공백이면 대문자로 치환해서 answer에 더해준다.
    • 그렇지 않다면 소문자로 치환해서 answer에 더해준다.
  4. answe을 String형으로 바꿔서 리턴해준다.

👨‍💻 코드

public class Solution {
  public String solution(String s) {
    StringBuilder answer = new StringBuilder(); // 문자열을 더하기 때문에 StringBuilder 사용

    String firstStr = s.charAt(0) + "";
    answer.append(firstStr.toUpperCase()); // 첫 글자는 무조건 대문자

    for (int i = 1; i < s.length(); i++) {
      String now = s.charAt(i) + "";
      if (now.equals(' ')) { // 공백이면 그대로 넘어가기
        answer.append(" ");
      } else if (s.charAt(i - 1) == ' ') { // 전 문자열이 공백이면
        answer.append(now.toUpperCase()); // 대문자
      } else {
        answer.append(now.toLowerCase()); // 소문자
      }
    }

    return answer.toString();
  }

  @Test
  public void 정답() {
    Assert.assertEquals("3people Unfollowed Me", solution("3people unFollowed me"));
    Assert.assertEquals("For The Last Week", solution("for the last week"));
    Assert.assertEquals("For", solution("for"));
    Assert.assertEquals("Hello  World", solution("hello  World"));
  }
}
profile
공블로그
post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 2월 19일

if (now.equals(' '))
의 경우 없어도 되지않나요?
StringBuilder answer = new StringBuilder();

    char firstChar = s.charAt(0);
    answer.append(Character.toUpperCase(firstChar)); 

    for (int i = 1; i < s.length(); i++) {
        char now = s.charAt(i);
        if (s.charAt(i - 1) == ' ') { 
            answer.append(Character.toUpperCase(now)); 
        } else {
            answer.append(Character.toLowerCase(now)); 
        }
    }

    return answer.toString();

String 으로 풀지않고 char로 풀경우 위와 같은 코드로 풀수 있는데 효율성 차이가 심하게 나서 위와 같은 방식도 고려해보셨으면 해서 댓글 남겨드립니다! 고생하세요~

답글 달기