cording test

Lv.0 코드 처리하기

JM Lee 2023. 5. 20. 19:08
728x90

코딩테스트 연습 - 코드 처리하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

230520 알박기 첫번째 문제.

팀원 모두가 여기에 영혼을 쏟아부어서 그런지, 정말 많은 답안들이 나타났다.

알고리즘에 관심 있는 분들이 이번 게시글을 유심히 보시면 정말 많은 도움이 될 것이다.

 

레벨 0이라고 쉽게만 보지 말고,

먼 길을 돌아서 가더라도 다음과 같은 실험을 할 역량이 있다면 한 번쯤은 돌아서 가보자

 

우선 내 코드를 소개하고, 다른 팀원 코드의 소개와 다른 사람의 풀이를 소개해보겠다.

# 제한사항에 따른 조건문 사용
# 가장 직관적으로 작성한 답안

def solution(code):
    ret = ''
    mode = '0'
    for idx, cod in enumerate(code):
        if cod == '1' and mode == '0':
            mode = '1'
        elif cod == '1' and mode =='1':
            mode = '0'
        elif mode == '0' and idx%2==0:
            ret += cod
        elif mode =='1' and idx%2!=0:
            ret += cod
    return ret if len(ret) else 'EMPTY'
# Boolean 사용
# False = 0 , True = 1
# mode가 0과 1로만 변화한다는 것을 이용

def solution(code):
    mode = False
    ret = ''
    for idx, cod in enumerate(code):
        if cod == '1': mode = not mode
        else: ret += cod if idx%2 == int(mode) else ''

    return ret if len(ret) else 'EMPTY'

# 팀원의 풀이 1
# 1을 기준으로 분리함으로써 빼낸 1을 for 문 식에 적절히 사용
# 코드 처리에 있어 여러 가지 관점을 볼 수 있음

def solution(code): 
    sub_str=code.split('1')
    ret=''
    start_idx=0
    for i,s in enumerate(sub_str):
				# 서브스트링의 시작부분이 짝수번째인지 홀수번째인지 파악 start_idx%2
				# mode == i%2.
        # start_idx%2 + i%2=(start_idx+i)%2
				# 시작이 짝수번째고 짝수번째만 반영해야할경우 시작이 0
				# 시작이 짝수번째고 홀수번째만 반영해야할경우 시작이 1
				# 시작이 홀수번째고 짝수번째만 반영해야할경우 시작이 1
				# 시작이 홀수번째고 홀수번째만 반영해야할경우 시작이 0
        ret += s[(start_idx+i)%2::2]
        start_idx=start_idx+len(s)+1
    return ret if ret else "EMPTY"
# if문을 보기 싫은 팀원의 풀이 2
# dictionary와 try/except를 적절히 사용
# get 함수는 이 코드를 통해 처음 접함
# 시간복잡도 면에서는 좋지 않지만, 다양한 아이디어와 문법을 사용할 수 있음

def ret_idx(x): return x
def blanks(x): return ''


mode0 = {0: blanks, 1: ret_idx}
mode1 = {1: blanks, 0: ret_idx}
mode = {0: mode1, 1: mode0}
ret = ''
mode_i = 0
for i, code_idx in enumerate(code):
    try:
        int(code_idx)
        mode_i = (mode_i+1) % 2
    except:
        ret += (mode[mode_i][i % 2](code_idx))
ret_dic = {'': 'EMPTY'}
try:
    ret = ret_dic[ret]
except:
    pass

# 다른 사람의 풀이 구경
# 팀원의 풀이 1을 좀 더 줄인 케이스

def solution(code):
    return "".join(code.split("1"))[::2] or "EMPTY"
    
# 이것을 replace로 바꿀 수 있다.

def solution(code):
    return code.replace('1','')[::2] or "EMPTY"

 

'cording test' 카테고리의 다른 글

Lv.2 스킬트리  (2) 2023.05.20
Lv.1 시저 암호(ascii code 사용)  (0) 2023.05.20
Lv.1 체육복  (0) 2023.05.20
Lv.1 신고 결과 받기  (1) 2023.05.17
Lv.1 신규 아이디 추천  (0) 2023.05.17