[코딩 테스트] 코드 처리하기 Python

주먹밥밥·2024년 3월 14일

문제💡

문자열 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 합니다.

입출력 예시

 code	         result
"abc1abc1abc"	"acbac"

입출력 설명

입출력 예

  • code의 각 인덱스 i에 따라 다음과 같이 mode와 ret가 변합니다.
i	code[i]	mode	ret
0	"a"	      0	    "a"
1	"b"	      0	    "a"
2	"c"	      0	    "ac"
3	"1"	      1	    "ac"
4	"a"	      1	    "ac"
5	"b"	      1	    "acb"
6	"c"	      1	    "acb"
7	"1"	      0	    "acb"
8	"a"	      0	    "acba"
9	"b"	      0	    "acba"
10	"c"	      0	    "acbac"

따라서 "acbac"를 return 합니다.

문제 해석✏️

mode가 1/0 으로 code[i]를 ret으로 부분적으로 준다는 글을 길게 썼다.
1. mode를 초기화 시켜준다.
2. ret를 초기화 시켜준다.
3. 코드 순회
(1) if code[i]안에 있는 문자가 1이면
(2) mode change (1 ➡️ 0)
(3) if code[i]안이 문자이면
(4) if mode ==1 이면서 idx %2 ==0 (짝수일 경우)
(5) ret에 char 추가하기
(6) if mode ==1 이면서 idx % 2 ==1 (홀수일 경우)
(7) ret에 char 추가하기
(8) 결과 문자열이 비어있으면 "EMPTY" 반환

문제

def solution(code):
    mode = 0  # 시작 모드는 0
    ret = ""  # 결과 문자열 초기화

    for idx, char in enumerate(code):
    # enumerate == 인덱스와 원소를 동시 접근 가능
        if char == "1": # 글 자체에 숫자가 있을 경우
            mode = 1 - mode  # 0으로 바꿔줘야 하니까 
        else:
            # 모드 0에서는 idx가 짝수일 때만 추가
            if mode == 0 and idx % 2 == 0:
                ret += char
            # 모드 1에서는 idx가 홀수일 때만 추가
            elif mode == 1 and idx % 2 == 1:
                ret += char

    # 결과 문자열이 비어있으면 "EMPTY" 반환
    return ret if ret else "EMPTY"

다른 사람들의 풀이

 solution(code):
    return "".join(code.split("1"))[::2] or "EMPTY"
    
# split("1") ➡️ "1"를 기준으로 분리 ["abc", "abc", "abc"]
# "".join() ➡️ 리스트의 요소들을 문자열로 합침 "abcabcabc"
# [::2] ➡️ 문자열의 시작부터 끝까지 각각 두칸씩 건너뛰며 추출(짝수 인덱스) "a", "c", "b", "a", "c"

우와 코드를 이렇게까지 줄릴 수 있다니...
오늘도 하나 배우고 갑니다...

profile
코딩은 열심히 해야겠지...?

0개의 댓글