JadenCase 문자열 만들기 level 2 자바

Heeeoh·2024년 3월 27일
0

프로그래머스

목록 보기
24/26
post-thumbnail

🧫 문제 분석

✔️ 출처

JadenCase 문자열 만들기 level 2

📖 문제

핵심
공백문자가 연속해서 나올 수 있다.
첫 문자는 대문자 그외에는 소문자


🔅 문제 풀이

처음 시도

import java.util.*;

class Solution {
    public String solution(String s) {
        s += "#";
        
        String[] str = s.split(" ");
        char temp;
        String answer = "";
        
            for (int i = 0; i < str.length; i++) {
                
                if (str[i].isBlank()) {
                    answer += " ";
                    continue;
                }
                
                temp = str[i].charAt(0);
                if (97 <= temp && temp <= 122) {
                    answer += ((char)(temp-32) + str[i].substring(1).toLowerCase());
                } else {
                    answer += str[i] ;
                }
            
                if (i < str.length) {
                    answer += " ";
                }
            }
        
        return answer.substring(0, answer.length() - 2);
    }
}

매우 부끄럽게도 왜 안되지 이해를 못했는데 직접 테스트 케이스를 만들다가 알게되었다...
if문에서 temp가 소문자일 때는 대문자로 바꾸고 뒤에 것을 tolowerCase로 갖다 붙이는데
정작 temp가 대문자이고 그 뒤에 문자열도 대문자일 때를 생각하지 못했다...

2차 시도 / 정답

class Solution {
    public String solution(String s) {
        s += "#";
     
        String[] str = s.split(" ");
        char temp;
        String answer = "";

            for (int i = 0; i < str.length; i++) {  
            	// 기존 s 에서 공백 2개일때 answer에 공백 추가 
                // split(" ")을 하게되면 입력이 "  a" 이렇게 연속 공백이면 " ", "a" 이런식으로 저장되기때문에 따로 공백을 추가해주었다.  
                if (str[i].isBlank()) {
                    answer += " ";
                    continue;
                }
                
                temp = str[i].charAt(0);
                if (97 <= temp && temp <= 122) {
                    answer += ((char)(temp-32) + str[i].substring(1).toLowerCase());
                } else {
                    answer += str[i].charAt(0) + str[i].substring(1).toLowerCase();    
                }
            
                if (i < str.length) {
                    answer += " ";
                }
            }

        return answer.substring(0, answer.length() - 2);
    }
}


맞추긴 했는데 느리다. ㅠㅠ 문자열을 다루는 문제에 약하다.
문자열 문제를 좀 집중적으로 풀어볼 필요가 있다.


❗ 오답노트 / 필요한 지식

  1. 고민중인 것은 일단 무작정 풀기 or 최고의 효율을 생각해보고 풀기이다.
  2. 물론 무작정 풀기가 시간면에서 나을 수도 있으나 시험이 아니니 이럴때 효율적으로 풀다보면 무작정 풀때 효율적으로 풀던 방식이 습관적으로 작용하지 않을까 싶다. 그러니 최대한 효율성도 챙기자.
profile
열심히 살자

0개의 댓글