본문 바로가기
DEVLOG/Algorithms

[2020 KAKAO 코딩테스트 1차] 1번 - 문자열 압축

2019. 9. 8.
반응형

2020 KAKAO BLIND RECRUITMENT 1차 코딩테스트

 

 

[2020 카카오 코딩테스트] 문제 및 후기/예상 커트라인

오늘 2020 KAKAO BLIND RECRUITMENT 1차 코딩테스트가 진행됐습니다. 개인적으로 난이도는 작년보다는 더 어렵게 느껴졌습니다. 이번 카카오 코딩테스트는 작년과 같이 총 7문제가 출제되었고, 5시간동안 진행되..

deepwelloper.tistory.com

 

1번 - [문자열 압축]

문제 해설

주어진 문자열 s를 1개부터 n//2개까지 쪼개면서, 각각의 경우 압축된 글자의 수를 확인한다.

잘린 문자열을 spl 리스트에 저장하고, spl을 순회하며 앞의 문자열(before)과 현재 문자열(c)를 비교한다.

앞의 문자열과 현재 문자열이 같으면 카운팅을 하고, 다를 경우 cnt+앞의문자열을 출력해준 후 cnt를 1로 초기화한다.

이렇게 해서 압축된 문자열의 length를 구하고 최소값과 비교한다.

 

파이썬(Python3) 코드

def solution(s):
    length = len(s)
    answer = 9999999

    # 문자열의 길이가 1인 경우 그 문자열 그대로 반환되므로 답은 1이 됩니다.
    if length == 1:
        answer = 1

    else:
        for i in range(1, length // 2 + 1):
            tmp = s
            '''
            문자열 split하기
            
            문자열을 1개부터 length//2개까지 split을 합니다.
            잘린 문자열은 spl에 저장됩니다.
            '''
            begin = 0; end = begin + i
            spl = []
            while tmp:
                spl.append(tmp[begin:end])
                tmp = tmp[end:]

            '''
            잘린 문자열들을 순회합니다.
            앞의 문자열과 같으면 카운팅을 해주고
            다르면 카운팅+앞의문자열을 출력해줍니다.
            '''
            newstr = ""
            before = spl[0]
            cnt = 1

            for idx, c in enumerate(spl):
                spl_length = len(spl)
                if idx:
                    if c == before:
                        cnt += 1
                        if idx == spl_length - 1:
                            newstr += (str(cnt) + before)
                    else:
                        if cnt > 1:
                            newstr += (str(cnt) + before)
                            if idx == (spl_length - 1):
                                newstr += c
                        else:
                            newstr += before
                            if idx == (spl_length - 1):
                                newstr += c
                        cnt = 1
                        before = c

            # 새로 생긴 문자열이 최소값일 경우 answer를 갱신해줍니다.
            new_str_length = len(newstr)
            if new_str_length < answer:
                answer = new_str_length

    return answer

s = "aaaaa"
print(solution(s))

 

 

[2020 KAKAO 코딩테스트 1차] 4번 - 와일드카드

2020 KAKAO BLIND RECRUITMENT 1차 코딩 테스트 4번 - [와일드카드] 문제 해설 효율성 테스트가 포함된 문제입니다. 마지막까지 효율성 테스트 2번을 통과하지 못했습니다.. 검색 키워드 제한사항에서 "검색 키..

deepwelloper.tistory.com

 

반응형

댓글