[프로그래머스 Lv2.] JadenCase 문자열 만들기

bee·2023년 2월 25일
0

코딩테스트

목록 보기
1/16
post-thumbnail

프로그래머스 Lv2. JadenCase 문제를 풀어 보았습니다.
일단 부끄러운 제 풀이를 보여드리자면요......

## 내 풀이
def solution(s):
    answer = '' # str
    
    s = [char for char in s] # str => list
    
    if s[0].isalpha() : # 문자열의 첫글자가 알파벳이고
        if s[0].islower() : # 문자열의 첫글자가 소문자일 경우
            s[0] = s[0].upper() # 대문자화
            
    for i in range(1, len(s)): # 첫글자 제외하고 순회
        if s[i].isalpha() : # 현재 문자가 알파벳일경우
            s[i] = s[i].lower()
        elif s[i] == ' ': # 현재 문자가 공백일경우
            s[i+1] = s[i+1].upper() # 그 다음 문자를 대문자화
    
    answer = ''.join(s[i] for s[i] in s) # list => str
        
    return answer

solution('3people unFollowed me')

'3people unfollowed mm'

잉?
걍 길고 정답은 안나오고 비효율적인 풀이였다.
따로 빼내서 코드를 돌려보긴 했는데, 아무래도 문제는 여기서 발생한 것 같다.

	elif s[i] == ' ' # 현재 문자가 공백일 경우
		s[i+1] = s[i+1].upper() # 그 다음 문자를 대문자화

이렇게 작성해도 파이썬은 i+1번째 문자를 가리키는 것이 아니라 계속 i를 가리키고 있었을 것. 왜인지는 모르겠는데 파이썬에서는 i = i+1 로 인식하고 있는 것 같다.

(왜죠? 아시는분?)

몇시간을 붙잡고있어도 즛토...즛토... 와카라나이....🥲 결국 구글링을 해보았는데, 문제의 핵심은 내장함수를 알고있느냐 아니냐 였던 것 같다. 그리고 프로그래머스에서 (python)의 경우에는 항상 answer = ''가 주어지는데, 난 이걸 꼭 사용해야하는줄 알았다..💢 안사용해도 되니 알아두자 우하하


## 모범답안 (1)
def solution(s):
	s = s.split(' ') # 입력받은 문자열을 공백 기준으로 쪼갠다 (=>list)
    for i in range(len(s)) : # 쪼개진 단어 덩어리 개수만큼 반복
    	s[i] = s[i].capitalize() # 핵심
    answer = ' '.join(s) # 다시 공백 기준으로 합친다 (=>str)
    return answer
    
solution('3people unFollowed me')

'3people Unfollowed Me'

모범답안 (1)의 핵심 포인트는 파이썬의 내장함수인 .capitalize() 였다.

.capitalize()
: 문자열의 첫 글자만 대문자로, 나머지 글자는 소문자로 변환한다.

## 모범답안 (2)
def solutions(s):
	answer = s.title()
    return answer

solution('3people unFollowed me')

'3people Unfollowed Me'

훨씬 간단하고 쉬운 풀이이지만, 내장함수를 모른다면 돌아갈 수 밖에 없던 문제였다. 모범답안 (2)의 핵심 포인트는 파이썬의 내장함수인 .title() 이었다.

.title()
: 문자열 내 띄어쓰기를 기준으로, 각 단어의 첫 글자만 대문자로 나머지 글자는 소문자로 변환한다.

profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글