코드 처리하기

장현웅·2024년 3월 12일

풀이

def solution(code):
    mode = 0
    ret = ''
    for i in range(len(code)):
        if mode == 0:
            if code[i] != '1':
                if i % 2 == 0:
                    ret += code[i]
            else:
                mode = 1
        else:
            if code[i] != '1':
                if i % 2 == 1:
                    ret += code[i]
            else:
                mode = 0
                
    if len(ret) == 0:
        return "EMPTY"
    else:
        return ret

< 회고 >

기초가 너무 부족하다는 생각이 들었다.

처음엔 혹시 파이썬에서 문자열 뒤에 다른 문자열을 붙이는 함수가 있지 않을까? 하고 찾아봤는데 그런건 딱히 없었고 그냥 +=로 뒤에 붙이는 수밖에 없었다.

그리고 최고의 실수는 문제를 제대로 잘 읽지 못한 것.. 짝수 홀수 얘기에 바로 나누기만 생각해서 생긴 실수였다. 인덱스의 홀짝만 보면 되는데 문자열을 정수형(int)로 바꾸려 시도한 짓거리다. 아래와 같은 오류가 발생했다.

ValueError: invalid literal for int() with base 10: 'a'

이 오류는 유효하지 않은 숫자 형식의 문자열을 'int()'함수를 사용하여 정수로 변환하려고 해서 발생했다.

마지막으로 생각보다 두루뭉실하게 조건식을 세우면 큰일난다는 점과 else를 너무 남발하면 안된다는 교훈을 얻었다 ㅋㅋㅋ

다른 풀이법

다른 사람 풀이에서 한줄로 해결한 코드를 봤는데 나도 이렇게 하고 싶다...ㄹㅇ.....

def solution(code):
    return "".join(code.split("1"))[::2] or "EMPTY"

이 코드는 '1'을 기준으로 문자열을 나누고, 홀수 인덱스의 부분 문자열을 추출해서 반환한다. 만약 결과 문자열이 비어있으면 'EMPTY'를 반화한다. 리스트의 슬라이싱과 'join'메서드를 활용한 간편한 풀이법...

[::2]는 파이썬에서 사용되는 슬라이싱 문법 중 하나로, 리스트나 문자열에서 홀수 인덱스 요소만 추출하는 방법이다. start:stop:step의 형식이다.

홀수 요소만 추출하려면 [1::2]으로 시작 인덱스가 1이고 스텝이 2인 슬라이싱을 쓰면 된다.

0개의 댓글