관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 JadenCase 문자열 만들기 -연습문제- 본문

알고리즘/문자열, 정렬

[알고리즘] 프로그래머스 JadenCase 문자열 만들기 -연습문제-

막무가내막내 2020. 4. 19. 21:43
728x90

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

 

프로그래머스

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

programmers.co.kr

 

프로그래머스 레벨2에 있는 문제이고 분류는 안되어있지만 문자열을 조작하는 문제입니다. 

 

처음에 쉽게 풀릴 거 같았는데 예외사항과 실수가 조금 있었습니다. (문제가 좀 빈약한 것 같아요)

 

예를들어 (제가 잘못이해한거 포함해서)

 

1. 공백이 연속으로 올 수도 있고 공백다음의 공백은 첫 문자로 치지 않는다. 즉 공백은 문자가 아니라고 생각하면 됩니다.

 

2. 처음 풀때 저는 제한 조건쪽만 보고 첫 문자가 영문이 아닌 경우만 이어지는 영문은 소문자로 쓰는줄 알고 그렇게 풀었는데 그냥 첫문자 뺴고는 다 소문자 와야한다고 문제 설명에 적혀있습니다. ㅠ 맨날 문제 잘못읽네요 언제 고쳐질련지 허허.

 

 


 

Character 의 기능을 사용하면 쉽게 풀리는 문제였습니다. 아스키코드 사용해서 알파벳 변환하고 알파벳인지 확인하는 것을 안한지가 오래되어서(소문자에 32빼면 대문자된다만 기억나네요. 65, 97이랑) 저는 Character 클래스의 함수를 사용해서 풀었습니다. 

 

그리고 주의해야할 점이 Char 형 빈 문자 즉 ' ' 는 equals(" ") 로 비교하면 안되고 꼭 equals(' ') 로 해줘야합니다.

 

풀이는 다음과 같습니다.

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.solution("3people    DnFollowed  sa23da me   444ASSDD");
    }

    public String solution(String s) {
        int i = 0;
        boolean isNewWord = true;
        StringBuilder answer = new StringBuilder(s);
        while (i < s.length()) {
            Character ch = s.charAt(i);
            if (isNewWord && !(ch.equals(' '))) {
                if (Character.isLowerCase(ch)) {
                    answer.replace(i, i + 1, ch.toString().toUpperCase());
                    isNewWord = false;
                    i++;
                    continue;
                }else if(Character.isUpperCase(ch)){    
                    isNewWord = false;
                    i++;
                    continue;
                }
                isNewWord = false;
            } else if (ch.equals(' ')) {
                isNewWord = true;
            }
            if (Character.isUpperCase(ch) && !isNewWord) {
                answer.replace(i, i + 1, ch.toString().toLowerCase());
            }
            i++;
        }
        return answer.toString();
    }
}

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다!!

728x90
Comments