본문 바로가기

CodingTest/Level1

[연습]KaKaO 2020 Coding Test 1번 문자열 압축

코딩테스트 공부 목적으로 풀어본 문제이다.

  • 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])
반응형