공log/[P&B]

[P&B] #2 Programmers

ming_OoO 2023. 7. 20. 16:26
728x90

프로그래머스 연습문제 Lv.2

 

JadenCase 문자열 만들기

문제 설명

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

 

제한 조건

s는 길이 1 이상 100 이하인 문자열

s는 알파벳과 숫자, 공백문자로 이루어져 있습니다.

  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

문제 풀이 코드

import java.util.Objects;
class Solution {
    public String solution(String s) {
        String answer = "";

        StringBuilder sb = new StringBuilder();
        String[] str = s.split("");
        int index = -1;
        for (int i = 0; i < str.length; i++) {
            if (Objects.equals(str[i], " ")) {
                sb.append(" ");
                index = i;
            }
            else if(i==0||i == index+1) {
                int ascii = str[i].charAt(0);
                if (ascii >= 48 && ascii <= 57)
                    sb.append(str[i]);
                else if (ascii >= 97 && ascii <= 122) {
                    ascii -= 32;
                    sb.append((char) ascii);
                } else {
                    sb.append(str[i]);
                }
            }else
                sb.append(str[i].toLowerCase());

        }

        answer = sb.toString();
        return answer;
    }
}

 

다른 사람의 문제 풀이 코드

class Solution {
  public String solution(String s) {
        String answer = "";
        String[] sp = s.toLowerCase().split("");
        boolean flag = true;

        for(String ss : sp) {
            answer += flag ? ss.toUpperCase() : ss;
            flag = ss.equals(" ") ? true : false;
        }

        return answer;
  }
}

 

문제 풀이 코멘트

 문자열을 모두 나누어 공백 다음문자열의 인덱스 값을 업데이트 시키면서 단어의 첫번째 문자 자리를 찾고, 아스키코드로 숫자와 대문자일 경우 그대로, 소문자일 경우에만 대문자로 바꾸도록 하는 방식을 사용하여 코딩했다. 코딩하는 과정에서 공백이 나란이 두번 올수도 있다는 전제조건을 생각하지 못해 시간이 걸렸었다.

 다른 사람의 문제풀이를 보니 모두 다 소문자 형태로 배열에 넣은 뒤 boolean을 사용하여 공백이 나오면 true가 되게끔 해서 첫 자리만 대문자로 바꿔주는 방법도 있었다. 코드를 간결하게 구성할 수 있도록 구현방식을 생각하는 것에 조금 더 노력해야할 것 같다.

728x90