728x90
<문제 설명>
문자열 code가 주어집니다.code를 앞에서부터 읽으면서 만약 문자가 "1"이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.mode가 0일 때code[idx]가 "1"이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 0에서 1로 바꿉니다.mode가 1일 때code[idx]가 "1"이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.code[idx]가 "1"이면 mode를 1에서 0으로 바꿉니다.문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
나의 풀이
def solution(code):
ret = ''
mode = 0
i = 0
for v in range(len(code)):
if mode:
if code[i] == '1':
i += 1
mode = 0
else :
if i % 2 == 1:
ret = ret + code[i]
i += 1
else:
i += 1
ret = ret + ''
else:
if code[i] == '1':
i += 1
mode = 1
else:
if i % 2 == 0:
ret = ret + code[i]
i += 1
else:
i += 1
ret = ret + ''
if ret == '':
ret = "Empty"
return ret
정말 힘들게 풀었는데 다른 분들의 풀이를 보니 힘들었던 내 자신이 초라해지는 기분...
다른 분들 풀이에서 내가 배웠었던 부분인데 생각을 못했던 부분을 정리해보겠다.
1. enumerate 사용
for i, c in enumerate(code) 를 사용해서 i에는 인덱스 값을, c에는 code[i] 값을 뽑아올 수 있다.
2. mode 가 0 (False) 일때와 mode가 1 (True) 일때 짝수 홀수 판별식에 mode를 사용할 수 있다.
3. if 문을 중첩해서 쓸 필요없이
if mode and i % 2 - 즉 mode가 1일때
elif not mode and not i % 2 - 즉 mode가 0 일때로 나누어서 간결하게 만들 수 있다.
728x90
'프로그래머스' 카테고리의 다른 글
프로그래머스 Python 모음제거 / x만큼 간격이 있는 n개의 숫자 (4) | 2023.11.22 |
---|---|
프로그래머스 Python 최댓값 만들기 / Lv2 최댓값과 최솟값 (1) | 2023.11.20 |
프로그래머스 Python 대소문자 바꿔서 출력하기/ 배열에서 문자열 대소문자 변환하기 (6) | 2023.11.20 |
프로그래머스 삼각형의 완성조건 (2) | 2023.11.20 |
프로그래머스 Python 피자나눠먹기 (6) | 2023.11.20 |