코딩테스트 공부 목적으로 풀어본 문제이다.
- Programmers.co.kr에서 문제를 참고하였으며, 작성된 코드는 틀릴 수도 있음.
- 다만 틀린대로 나두고 틀린부분은 참고링크를 넣어놓았다.
Python3
# kakao 2020 coding Test No.1
# 문자열 압축 문제
# https://programmers.co.kr/learn/courses/30/lessons/60057?language=python3#_=_
#s = "abcabcabcabcdededededede"
cnt =1
tmp_list2 =[]
while (cnt != len(s)):
tmp_list = []
'''
주어진 문자열을 1개씩, 2개씩, 3개씩 ... 나누어 리스트로 저장한다
'''
for i in range(0,len(s),cnt):
tmp_list += [s[i:i+cnt]]
tmp_result =""
'''
나누어진 문자열 리스트를 순회하며 중복된 문자열 찾기
여기서 나는 앞에서 뒤로 보는걸 생각했고, 구현하여 결과를 제출해보니 모든 테스트 중 1개에서 런타임에러가 나옴.(테스트5번)
아무래도 while 안에서 2중 for문을 통한 순회는 시간복잡도가 말도안될거같았음.
검색해보니 -> 순서 순회가아닌 <- 로 보면서 -> 방향으로 가는 방법으로 하더라.
해당 블로그는
https://deepwelloper.tistory.com/92
'''
for j in range(0, len(tmp_list)):
if j !=0 and tmp_list[j-1] == tmp_list[j]:
continue
cnt2 =1
for z in range(j+1, len(tmp_list)):
if tmp_list[j] == tmp_list[z]:
cnt2+=1
else:
break
'''
리스트에서 중복된 문자의 수와 문자를 저장하는 부분
'''
if cnt2 == 1:
tmp_result += tmp_list[j]
else:
tmp_result += str(cnt2)+tmp_list[j]
'''
최소 길이인 중복처리된 문자를 확인하고 출력
answer = tmp_list2[0]
! tmp_list2는 [문자길이, 문자]로 구성되게 해놓음.
'''
if tmp_list2 != []:
if (int(tmp_list2[0]) > len(tmp_result)):
tmp_list2 = [len(tmp_result), tmp_result]
else:
tmp_list2 = [len(tmp_result), tmp_result]
cnt +=1
print (tmp_list2[0])
반응형
'CodingTest > Level1' 카테고리의 다른 글
[연습] 코딩테스트-가운데 글자가져오기 (0) | 2020.01.15 |
---|---|
[연습] 코딩테스트-요일 맞추기 (0) | 2020.01.15 |
[연습]코딩테스트-k번째수 (0) | 2020.01.14 |
[연습]코딩테스트-모의고사 (0) | 2020.01.14 |
[연습]코딩테스트- 완주하지 못한 선수 (0) | 2020.01.09 |