728x90
오늘 내가 공부했던 문제들 중에 유일하게 스스로 풀었던 문제이다!
어렵게 생각하지 않았다.
# abcabcab
#
# [a b c a b c a b ] > 8
# [ab ca bc ab] > 8
# [abc abc ab] > 6
# [abca bcab] > 8
혼자서 주석들을 이렇게 써보고 문자열들을 이렇게 나눈다음에 각각을 리스트에 넣고, 인덱스를 사용하여
현재 인덱스가 지칭하는 항목과 그 다음항목이 같다면 ''으로 치환해주어 겹치는 부분을 사라지게 했다. 그 과정에서 숫자를 넣을 부분이 있어야 하기 때문에, overlap_lst란 개념을 도입해서 겹쳐져있는 문자들을 합쳐서 그 숫자를 세어주었다.
문제에서 문자열로 반환이 아닌, 가장짧은 길이만 반환하면 되기에 생각가능한 방법이었다.
input = "abcabcabcabcdededededede"
def string_compression(string):
lst = []
min_string = len(string)
for i in range(1,len(string)):
for j in range(0,len(string),i):
lst.append(string[j:j+i])
overlap_lst = []
for k in range(len(lst)-1):
if lst[k] == lst[k+1]:
overlap_lst.append(lst[k])
lst[k] = ''
lst = ''.join(lst)
if min_string>(len(lst) + len(list(set(overlap_lst)))):
min_string = (len(lst) + len(list(set(overlap_lst))))
lst =[]
return min_string
print(string_compression(input)) # 14 가 출력되어야 합니다!
# abcabcab
#
# [a b c a b c a b ] > 8
# [ab ca bc ab] > 8
# [abc abc ab] > 6
# [abca bcab] > 8
# seq[i:i+length] for i in range(0, len(seq), length)
간단한데 생각보다 어려웠다
728x90
'Python > 알고리즘공부' 카테고리의 다른 글
08_새로운게임_삼성역량테스트 (0) | 2021.11.05 |
---|---|
07_올바른 괄호 문자열 만들기_카카오 문제 (0) | 2021.11.05 |
05_catchme 문제! ( 상반기 line인턴채용문제) (1) | 2021.11.05 |
04_ 피보나치 수열 및 여러 문제들(hard) (0) | 2021.10.29 |
03_ DFS , BFS (0) | 2021.10.29 |