[프로그래머스] JadenCase 문자열

klean·2021년 1월 27일
0

프로그래머스 레벨2

목록 보기
12/13

문제 요약

각 단어의 맨 첫번째 글자가 대문자인 문자열을 jaden case 문자열이라고 한다.
주어진 문자열을 jadencase 문자열로 만들어라

아이디어

그냥 리니어하게 검사해서 string을 재구성하였다.

삽질

문제에서 숫자에 관한 언질이 있고 테케에 숫자가 있어서 망정이지...
진짜 코테 같았으면 숫자 관련된 처리도 해야한다는 것을 유추해서 풀었어야했을 것이다.

새로 배운 python

string의 특정 index 캐릭터를 수정할 수 없다.

리스트로 변형하면 쉽게 변형 가능하다.

string, list 간 변환

s = ''.join(l) # list->string
l = [char for char in word] # string->list

char 간 산술 연산

cpp의 경우 (char)(c1+c2)같은 연산이 되지만
python은 chr(ord(c1)+ord(c2))로 해야한다.

is vs ==

is는 동일 object인지를 검사하고
==는 동일 값인지를 검사한다.

str.lower()

string을 lowercase 문자열로 바꿔준다

str.isalpha() , str.isdigit()

string이 문자인지 숫자인지 알려준다
char 하나에도 된다

pythonic한 모범 코드

space token 단위로 끊어서 token을 소문자들로 바꿔주고
앞부분만 대문자로 바꿔준다. 뒷부분은 substring으로 붙여준다
대소문자 변환 함수는 숫자에 대해선 동작하지 않는다
space에 대해 join하면 된다.

def solution(s):
    answer = ''
    s = s.split(' ')
    for i in range(len(s)):
        if s[i] == '':
            continue
        s[i] = s[i].lower()
        if s[i][0].isalpha():
            s[i] = s[i][0].upper() + s[i][1:]

    answer = ' '.join(s)
    return answer

코드 python

def is_big(c):
    return c>='A' and c<= 'Z'
def is_num(c):
    return c>='0' and c<='9'
def is_small(c):
    return c>='a' and c<='z'
def is_space(c):
    return c == ' '

def solution(s):
    answer = []
    l = []
    for i in range(len(s)):
        l.append(s[i])
    tou = ord('a')-ord('A')# 양수
    if(is_small(l[0])):
        answer.append(chr(ord(l[0])-tou))
    else:
        answer.append(l[0])
    for i in range(1,len(l)):
        if(is_space(l[i-1]) and is_small(s[i])):
            answer.append(chr(ord(l[i])-tou))
        elif(not is_space(l[i-1]) and is_big(l[i])):
            answer.append(chr(ord(l[i])+tou))
        else: #스페거나 숫자거나
            answer.append(l[i])
    t = ''.join(answer)
    answer= t
    return answer

코드 cpp

#include <string>
#include <vector>
#include<math.h>

using namespace std;

bool is_big(char a){
    return a>='A'&&a<='Z';
}
bool is_small(char a){
    return a>='a'&&a<='z';
}
bool is_num(char a){
    return a>='0'&&a<='9';
}
bool is_space(char a){
    return a==' ';
}

string solution(string s) {
    string answer = "";
    int tou = abs('a'-'A');
    if(is_small(s[0])){//대문자도 아니고 숫자도 아닐 때
        answer+=(char)(s[0]-tou);
    }
    else{
        answer+=s[0];
    }
    for(int i = 1;i<s.size();i++){
        if(is_space(s[i-1])&&is_small(s[i])){
            answer+=(char)(s[i]-tou);
        }
        else if(!is_space(s[i-1])&&is_big(s[i])){
            answer+=(char)(s[i]+tou);
        }
        else{
            answer+=s[i];
        }
    }
    return answer;
}

0개의 댓글