728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12930?language=python3
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
def solution(s):
isEven=True
arr=[]
for i in s:
if i == ' ':
arr.append(i)
isEven=True
elif isEven:
arr.append(i.upper())
isEven=False
else:
arr.append(i.lower())
isEven=True
return "".join(arr)
설명
빈 리스트 arr에 s의 각 문자들을 append하는데, isEven이라는 변수를 두어 s의 문자가 각 단어에서 짝수번째 인덱스를 가지는지 판단하여 문자를 대/소문자로 바꿔서 append한다. 또한 문자가 공백일 경우 isEven을 True로 하여 각 단어의 첫 번째 문자는 대문자로 append될 수 있도록 한다. 마지막에 arr에 있는 문자들을 join하여 반환한다.
Tip (아래 "더보기" 클릭)
더보기
for문과 if문을 한 줄로 사용하고 enumerate 함수를 사용하면 다음과 같이도 가능하다.
def solution(s):
return " ".join(["".join([letter.upper() if i%2==0 else letter.lower() for i,letter in enumerate(word)]) for word in s.split(' ')])
한 줄이어서 코드는 짧지만 가독성은 떨어져서 개인적으로 비추한다.
TIL
- str.upper() / str.lower(): 문자열의 모든 글자를 대/소문자로 변환한 새 문자열을 반환한다.(원본 문자열은 그대로)
- 문자열은 immutable하기 때문에 인덱싱을 이용하여 값을 바꿀 수 없다. 따라서 값을 바꾸려면 ① list로 변환하여 인덱싱을 이용해 값을 바꾼 후 다시 join하거나 ②replace()를 이용해야한다.
- for문과 if문을 한 줄로도 사용할 수 있다.
예시: li = [i for i in range(10)] * li = list(range(10)) 과 같다. - enumerate(iterable, start=0): iterable 자료형에서 각 원소의 인덱스 번호와 값을 tuple형태로 반환한다. start값을 조정하면 인덱스 번호의 시작 값을 조정할 수 있다.
주로 반복문에서 아래와 같이 사용한다.
for i, j in enumerate(['apple', 'banana', 'orange']):
print(i,j)
'''
출력 결과:
0 apple
1 banana
2 orange
'''
728x90
반응형
'Algorithm, 코딩테스트' 카테고리의 다른 글
예산-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1] (0) | 2022.10.13 |
---|---|
3진법 뒤집기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1] (0) | 2022.10.12 |
같은 숫자는 싫어-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1] (0) | 2022.10.09 |
최대공약수와 최소공배수-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1] (0) | 2022.10.07 |
직사각형 별찍기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1] (0) | 2022.10.07 |