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 |