7-3 JadenCase 문자열 만들기

유태형·2022년 10월 24일
0

알고리즘 - Java

목록 보기
22/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다




문제



문제 분석

첫 글자만 대문자로 변환하는, InitCap으로 전환하는 문제입니다.




풀이

나의 풀이

import java.util.*;

class Solution {
    public String solution(String s) {
        String[] strings = s.split(" ");
        String[] answer = Arrays.stream(strings)
            .map(h -> {
                if(h.equals(" ")) return h;
                h = h.toLowerCase();
                String pre = h.substring(0,1);
                String post = h.substring(1);
                if(h.charAt(0) >= 'a' && h.charAt(0) <= 'z')
                  pre = pre.toUpperCase();
                return pre + post;
            })
            .toArray(String[]::new);
            
        return String.join(" ",answer);
    }
}

억지로 스트림으로 풀어보려고 하였습니다. 첫 글자와 나머지 글자들을 구분하여 첫글자를 대문잘 수정하려고 하였었습니다. 하지만 공백이 2개이상 나올때 split() 메서드로 공백이 연속적으로 여러개 나오는 문자열을 반영할 수 없으므로 단어 단위로 나누어 계산하는 방법은 잘못된 방식이었습니다.

  • 문자열.charAt(인덱스) : char 데이터 타입을 반환합니다. Character객체의 메서드를 사용할 수 없습니다(Character.toUppercase() 같은 메서드 사용 불가)


강의의 풀이

예상했다 싶이 이전 문자가 공백이면 대문자로 수정합니다.
배열을 하나 더 추가해서 이전 문자를 기억하도록 하면 간편히 구현할 수 있습니다.

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        // 모두 소문자로
        s = s.toLowerCase();
        // 첫글자는 대문자
        char last = ' ';
        
        for(char c : s.toCharArray()){
            // 이전 문자가 공백이면 대문자로 저장
            if(last == ' ') c = Character.toUpperCase(c);
            answer.append(c);
            last = c;
        }
        return answer.toString();
    }
}

변수 = 문자.toUpperCase(변수)가 아니라 변수 = Character.toUpperCase(변수)가 옳바른 사용방법입니다. Character의 스태틱 메서드임을 알고 사용해야 합니다.




GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B87.Sort(%EC%A0%95%EB%A0%AC)/JadenCase%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A7%8C%EB%93%A4%EA%B8%B0.java

profile
오늘도 내일도 화이팅!

0개의 댓글