반응형
2020년 카카오 블라인드 채용이다.
신입 개발자를 코딩테스트를 통해 선별해낸다.
한번 풀어봤는데,
생각보다 어렵다ㅜㅜ
34점 맞아서, 틀린 코드다.ㅠㅠ
def solution(s):
answer = 0
tmp = s[1:]
try:
a = tmp.index(s[0])
except:
return len(s)
arr = list(range(1, int(len(s)/2)+1))
arr = sorted(arr, reverse=True)
is_find = 0
for i in arr:
if s[:i] == s[i:i+i]:
is_find = i
break
how_loop = len(s)/is_find
rest_ = 0
if how_loop % 1 != 0:
rest_ = len(s) - (int(how_loop) * is_find)
else:
rest_ = 0
count = 0
arr_ = []
for i in range(1, int(how_loop)):
if s[is_find*(i-1):is_find*i] == s[is_find*i:is_find*(i+1)]:
arr_.append(1)
else:
arr_.append(0)
is_count = 0
arr__ = []
answer = 0
for i in arr_:
if i == 1:
is_count += 1
else:
if is_count != 0:
answer += is_find + len(str(is_count))
is_count = 0
else:
answer += 1
if arr_[-1] != 0:
answer += is_find + len(str(is_count))
else:
answer += is_find
answer += rest_
return answer
다시 한번 풀어봐야겠다!!
일단 프로그래머스 게시판에서 100점 받은 고수의 코드이다!
#자릿수계산
def jari(n):
count=1
while(n>=10):
n//=10
count+=1
return count
def solution(s):
answer = 0
var_count=[] #[n개단위로잘랐을때][몇번째등장한반복]=반복횟수
var_len=[len(s)] #[n개단위로잘랐을때]=길이
for i in range(1,len(s)//2+1):
var_continue=False #연속하는지
var_temp_left=0
var_temp_right=0
var_count.append([])
for j in range(len(s)//i-1):
if(s[i*j:i*(j+1)]==s[i*(j+1):i*(j+2)]):
if(var_continue):
var_count[i-1][len(var_count[i-1])-1]+=1
else:
var_count[i-1].append(2)
var_continue=True
else:
var_continue=False
for j in var_count[i-1]:
var_temp_left+=j #생략되어지는문자길이
var_temp_right+=i+jari(j) #표시해야하는문자길이=자른문자길이+반복횟수
var_len.append(len(s)-var_temp_left*i+var_temp_right) #길이=전체길이-생략길이+표시길이
answer=min(var_len)
return answer
프로그래머스의 진짜 창의적인 코드
def compress(text, tok_len):
words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
res = []
cur_word = words[0]
cur_cnt = 1
for a, b in zip(words, words[1:] + ['']):
if a == b:
cur_cnt += 1
else:
res.append([cur_word, cur_cnt])
cur_word = b
cur_cnt = 1
return sum(len(word) + (len(str(cnt)) if cnt > 1 else 0) for word, cnt in res)
def solution(text):
return min(compress(text, tok_len) for tok_len in list(range(1, int(len(text)/2) + 1)) + [len(text)])
a = [
"aabbaccc",
"ababcdcdababcdcd",
"abcabcdede",
"abcabcabcabcdededededede",
"xababcdcdababcdcd",
'aaaaaa',
]
for x in a:
print(solution(x))
반응형
'프로그래머스' 카테고리의 다른 글
프로그래머스 - '모의고사' 문제풀이 (0) | 2020.08.22 |
---|---|
프로그래머스 - 완주하지 못한 선수 문제풀이 (0) | 2020.08.22 |
프로그래머스 - 최댓값 구하기 문제 (4) | 2020.05.26 |
프로그래머스 "크레인 인형뽑기 게임" 문제풀이 - Henry's Algorithm (0) | 2020.05.25 |
2018 KAKAO BLIND RECRUITMENT[1차] 추석 트래픽 (0) | 2020.05.07 |