코테 노트/프로그래머스

Level 2 [3차] 압축 <2018 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2022. 3. 28. 14:17
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17684?language=python3 

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

from string import ascii_uppercase
from collections import defaultdict

def solution(msg):
    answer = []
    dic = defaultdict(int)
    i = 0
    for c in ascii_uppercase:
        i += 1
        dic[c] = i
    start = 0
    end = 0
    while True:
        word = msg[start:end+1]
        if dic[word] > 0:
            answer.append(dic[word])
            end += 1
            if end >= len(msg):
                break
        else:
            i += 1
            dic[word] = i
            start += (end-start)
            while True:
                end += 1
                if end >= len(msg) or dic[msg[start:end+1]] == 0:
                    end -= 1
                    break
    return answer

풀이 과정

풀이 시간 52분

 

from string import ascii_uppercase
from collections import defaultdict

def solution(msg):
    answer = []
    
    #사전
    dic = defaultdict(int)
    
    #사전 인덱스
    i = 0
    
    #알파벳 대문자 사전에 추가
    for c in ascii_uppercase:
        i += 1
        dic[c] = i
        
    #단어의 시작 인덱스 start, 끝 인덱스 end
    start = 0
    end = 0
    
    while True:
    	#현재 단어
        word = msg[start:end+1]
        
        #사전에 있는 단어인 경우,
        if dic[word] > 0:
        	#사전 인덱스를 출력한다
            answer.append(dic[word])
            end += 1
            
            #msg 문자열을 모두 탐색한 경우, 종료
            if end >= len(msg):
                break
                
        #사전에 없는 단어인 경우,
        else:
        	#1 증가시킨 사전 인덱스에 단어를 추가한다
            i += 1
            dic[word] = i
            
            #처리한 단어 이후로 시작 인덱스를 갱신한다
            start += (end-start)
            
            #끝 인덱스를 찾는다
            while True:
                end += 1
                
                #msg 문자열 인덱스를 초과하거나 사전에 있는 가장 긴 단어로 인덱스를 셋팅한다
                if end >= len(msg) or dic[msg[start:end+1]] == 0:
                    end -= 1
                    break
                    
    return answer

#시간복잡도 = O(n^2), 공간복잡도 = O(n^2)

참고

 

Level 2 [3차] n진수 게임 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17687?language=python3 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여..

hwayomingdlog.tistory.com

 

Level 2 [3차] 파일명 정렬 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17686?language=python3 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히..

hwayomingdlog.tistory.com

 

Level 2 [3차] 방금그곡 <2018 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/17683?language=python3 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때..

hwayomingdlog.tistory.com

  • 5. 자동완성
728x90
반응형