Shiny Sky Blue Star

프로그래머스 문제 풀이/프로그래머스 (JAVA)

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

gamja00 2024. 12. 21. 21:42

 

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

 


문제

  1. 입력으로 문자열 s ( 1 <= s.length() <= 200 ) 가 입력으로 들어옴.
  2. 첫 문자가 대문자가 아니면(소문자라면) 대문자로 바꾸고, 첫 문자가 아닌데 대문자라면 소문자로 바꾼다.

 

완성 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        
       if (s.length() == 1 && Character.isLowerCase(s.charAt(0))) {
            s = s.toUpperCase();
        } else {
            for (int i = 0; i < s.length() - 1; i++) {
                if (i == 0 && Character.isLowerCase(s.charAt(i))) {
                    s = s.substring(0, i) + Character.toString(s.charAt(i)).toUpperCase() + s.substring(i + 1);
                }
                if (s.charAt(i) == ' ' && s.charAt(i + 1) != ' ' && Character.isLowerCase(s.charAt(i + 1))) {
                    s = s.substring(0, i + 1) + Character.toString(s.charAt(i + 1)).toUpperCase() + s.substring(i + 2);
                }
                if (s.charAt(i) != ' ' && s.charAt(i + 1) != ' ' && Character.isUpperCase(s.charAt(i + 1))) {
                    s = s.substring(0, i + 1) + Character.toString(s.charAt(i + 1)).toLowerCase() + s.substring(i + 2);
                }
            }
        }

        answer = s;
        
        return answer;
    }
}

 

사실 처음에 첫 문자만 대문자로 바꾸면 되는 줄 알고 했는데 틀려서 고치다가 보니 코드가 조금 길어졌다.

마지막엔 18번 하나만 틀려서 뭔가 했는데 문자열 길이가 1일 때를 고려하지 않아서 그런 거였다.

 

또 다르게 만들어본 코드

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String answer = "";
        
       String[] temp = s.split("");
        System.out.println(Arrays.toString(temp));

        if (s.length() == 1 && Character.isLowerCase(s.charAt(0))) {
            temp[0] = temp[0].toUpperCase();
        } else {
            for (int i = 0; i < s.length() - 1; i++) {
                if (i == 0 && Character.isLowerCase(temp[i].charAt(0))) {
                    temp[i] = Character.toString(temp[i].charAt(0)).toUpperCase();
                }
                if (s.charAt(i) == ' ' && s.charAt(i + 1) != ' ' && Character.isLowerCase(s.charAt(i + 1))) {
                    temp[i+1] = Character.toString(temp[i + 1].charAt(0)).toUpperCase();
                }
                if (s.charAt(i) != ' ' && s.charAt(i + 1) != ' ' && Character.isUpperCase(s.charAt(i + 1))) {
                    temp[i+1] = Character.toString(temp[i + 1].charAt(0)).toLowerCase();
                }
            }
        }

        answer = String.join("", temp);
        
        return answer;
    }
}

 

문자열을 문자열 배열로 바꾸어서 해당 문자열 배열 위치에서 바로 꺼내 고쳐 넣어 문자열 배열 자체의 원소를 수정하는 방식이다.