Study/Algorithm

[TIL] 자바 알고리즘 연습 240725 4일차

nonameWright 2024. 7. 25. 23:05

문제구분 : 문자열

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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

 

풀이회고 : 

오늘은 페어프로그래밍을 진행한 날... 부담스러웠는데 다른 사람의 코드 진행과정을 직접 듣고 쳐보고 설명을 듣는게 도움이 많이 됐다.

내가 처음 짠 코드는 기본적으로 많은 생각을 거친 코드는 아니었다. 단순하게 들어오는 문자를 공백 기준으로 자르고 대문자로 만들건 만들고 이어 붙이고가 끝인 코드였고, 문제의 8번 테스트케이스를 제외하곤 잘 돌아갔다.

8번 테스트 케이스는 앞 뒤로 공백이 두칸씩 포함되어 있었다. 이에 대해 수정을 거친 코드는 다음과 같다.

 

 public String solution(String s) {
        String answer = "";
        StringBuilder temp = new StringBuilder();
        String[] strArray = s.split(" ");
        for(String str: strArray) {
            for(int i = 0; i < str.length(); i++) {
                if (i == 0 && !Character.isDigit(str.charAt(i))) {
                    temp.append(Character.toUpperCase(str.charAt(i)));
                }else if ( str.length() == 0 ){
                    temp.append(" ");
                }else {
                    temp.append(Character.toLowerCase(str.charAt(i)));
                }
            }
            temp.append(" ");
        }
        if(s.substring(s.length()-1, s.length()).equals(" ")){
            return temp.toString();
        }
        temp.deleteCharAt(temp.length() - 1);
        answer = temp.toString();
        return answer;
    }

 

StringBuilder를 사용하여 필요한 문자를 검사해 대문자로 넣거나 소문자로 넣도록 하였다.

하지만 다른 사람들 코드는 훨씬 효율적으로 적은 탐색을 하도록 하는 케이스가 많아 참고가 되었다.

효율적인 코드를 더 고민해야 할 것 같다.

 

문제는 통과!

반응형