코딩 테스트/Level 2

30. JadenCase 문자열 만들기

컴닥 2020. 8. 14. 10:17
반응형

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

JadenCase 문자열 만들기
연습문제 
3010명 완료

문자열을 다루는 함수들을 몰라도.. 
어렵지 않게 풀수 있지만.. 
알면 더 편하다. 

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건

programmers.co.kr

파이썬

def solution(s):
    words = s.split(' ')
    for i, word in enumerate(words):
        words[i] = word.capitalize()
    return ' '.join(words)
테스트 1 〉	통과 (0.04ms, 10.7MB)
테스트 2 〉	통과 (0.04ms, 10.7MB)
테스트 3 〉	통과 (0.04ms, 10.7MB)
테스트 4 〉	통과 (0.04ms, 10.7MB)
테스트 5 〉	통과 (0.05ms, 10.5MB)
테스트 6 〉	통과 (0.04ms, 10.6MB)
테스트 7 〉	통과 (0.06ms, 10.7MB)
테스트 8 〉	통과 (0.05ms, 10.7MB)
테스트 9 〉	통과 (0.04ms, 10.7MB)
테스트 10 〉	통과 (0.04ms, 10.7MB)
테스트 11 〉	통과 (0.04ms, 10.6MB)
테스트 12 〉	통과 (0.04ms, 10.7MB)
테스트 13 〉	통과 (0.04ms, 10.6MB)
테스트 14 〉	통과 (0.05ms, 10.7MB)
테스트 15 〉	통과 (0.05ms, 10.7MB)
테스트 16 〉	통과 (0.04ms, 10.7MB)
def solution(s):
    return ' '.join(map(lambda x: x.capitalize(), s.split(' ')))
테스트 1 〉	통과 (0.05ms, 10.7MB)
테스트 2 〉	통과 (0.07ms, 10.7MB)
테스트 3 〉	통과 (0.05ms, 10.7MB)
테스트 4 〉	통과 (0.05ms, 10.8MB)
테스트 5 〉	통과 (0.05ms, 10.6MB)
테스트 6 〉	통과 (0.05ms, 10.6MB)
테스트 7 〉	통과 (0.05ms, 10.7MB)
테스트 8 〉	통과 (0.05ms, 10.7MB)
테스트 9 〉	통과 (0.05ms, 10.7MB)
테스트 10 〉	통과 (0.04ms, 10.6MB)
테스트 11 〉	통과 (0.05ms, 10.7MB)
테스트 12 〉	통과 (0.05ms, 10.7MB)
테스트 13 〉	통과 (0.04ms, 10.7MB)
테스트 14 〉	통과 (0.05ms, 10.8MB)
테스트 15 〉	통과 (0.06ms, 10.7MB)
테스트 16 〉	통과 (0.04ms, 10.6MB)

map(함수, 이터러블)을 실행하면
이터러블의 각각의 엘리먼트에 함수를 먹여서
이터레이터로 돌려준다.

이터레이터이기 때문에
확인을 하려면
리스트나 튜플 등으로 바꿔줘야 한다. 

>>> map(len, ["1234","1","23"])
<map object at 0x0466e9c0>

>>> tuple(map(len, ["1234","1","23"]))
(4, 1, 2)

 

Java

자바의 split는 꼬다리의 빈 문자열을 날려버린다. 
"   ".split(" ")의 결과는 [] 텅빈 배열이다. 
"  s   ".split(" ") 은 [, , s] 이다. 
앞은 왜 살려두냐구?

"   ".split(" ", -1) 을 해야 꼬다리의 빈 문자열이 인식된다. 

자바에서 예측 불가능한 게
이 함수 뿐만이 아니니.. 머.. 
중구난방 API ㅎㅎㅎ

 

class Solution {
    public String solution(String s) {
        var sSplit = s.toLowerCase().split(" ", -1);
        for (var i = 0; i < sSplit.length; i++)
            if (sSplit[i].length() > 0)
                sSplit[i] = sSplit[i].substring(0, 1).toUpperCase() + sSplit[i].substring(1);
        return String.join(" ", sSplit);
    }
}
테스트 1 〉	통과 (1.32ms, 67.2MB)
테스트 2 〉	통과 (1.80ms, 76.3MB)
테스트 3 〉	통과 (1.94ms, 76.3MB)
테스트 4 〉	통과 (1.50ms, 65.4MB)
테스트 5 〉	통과 (1.59ms, 81.4MB)
테스트 6 〉	통과 (1.29ms, 66.9MB)
테스트 7 〉	통과 (1.67ms, 83.3MB)
테스트 8 〉	통과 (1.66ms, 70.3MB)
테스트 9 〉	통과 (2.13ms, 79.1MB)
테스트 10 〉	통과 (1.37ms, 74.4MB)
테스트 11 〉	통과 (1.74ms, 71.7MB)
테스트 12 〉	통과 (2.00ms, 70.2MB)
테스트 13 〉	통과 (1.47ms, 74.1MB)
테스트 14 〉	통과 (1.80ms, 76.6MB)
테스트 15 〉	통과 (1.74ms, 70.3MB)
테스트 16 〉	통과 (2.37ms, 74.8MB)
테스트 17 〉	통과 (1.32ms, 83.9MB)
테스트 18 〉	통과 (1.61ms, 71.9MB)

빠르게....

class Solution {
    public String solution(String s) {
        var spaceCheck = true;
        var answer = s.toLowerCase().toCharArray();
        for (var i = 0; i < answer.length; i++) {
            if (spaceCheck && answer[i] >= 97) answer[i] -= 32;
            spaceCheck = (answer[i] == ' ');
        }
        return String.valueOf(answer);
    }
}
테스트 1 〉	통과 (0.02ms, 79.1MB)
테스트 2 〉	통과 (0.04ms, 88.6MB)
테스트 3 〉	통과 (0.03ms, 80.8MB)
테스트 4 〉	통과 (0.04ms, 83.1MB)
테스트 5 〉	통과 (0.07ms, 74.3MB)
테스트 6 〉	통과 (0.06ms, 72.7MB)
테스트 7 〉	통과 (0.04ms, 74.1MB)
테스트 8 〉	통과 (0.03ms, 74.9MB)
테스트 9 〉	통과 (0.04ms, 76.7MB)
테스트 10 〉	통과 (0.02ms, 73.2MB)
테스트 11 〉	통과 (0.04ms, 73.9MB)
테스트 12 〉	통과 (0.03ms, 75.1MB)
테스트 13 〉	통과 (0.03ms, 77.4MB)
테스트 14 〉	통과 (0.05ms, 76MB)
테스트 15 〉	통과 (0.05ms, 75.7MB)
테스트 16 〉	통과 (0.03ms, 74.2MB)
테스트 17 〉	통과 (0.04ms, 77.2MB)
테스트 18 〉	통과 (0.03ms, 77.3MB)
반응형