티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/17684

 

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

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

programmers.co.kr

 

코드

def solution(msg):
    answer = []
    eng = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    
    while len(msg) > 0:
        w = msg[0]
        cnt = 0
        if len(msg) == 1:
            answer.append(eng.index(w)+1)
            break
        while len(w) < len(msg):
            s = w
            cnt += 1
            w += msg[cnt]
            if w not in eng:
                w = s
                break
        answer.append(eng.index(w)+1)
        msg = msg[len(w):]
        if msg:
            eng.append(w + msg[0])
    return answer

msg문자열에 들어가 있는 문자를 한개씩 확인하여 eng 리스트안에 있는 문자열이면 index 값을 가져와 answer에 넣어주면 된다.

 

KAKAO가 msg문자열로 들어 왔을 경우에 첫번째 문자열 K부터 확인을 하는데 그 뒤에 문자열까지 합친 값이 eng에 있을 경우 빨리 찾을 수 있으므로 뒤에 문자열을 붙여 eng에 있는지를 확인한다.

 

예를 들어 eng 리스트에 KA가 있는지 부터 확인을 한다. 만약 있다면 KAK 까지 확인을 하고 KAK는 없다면 eng리스트에 KA에 인덱스를찾아 answer에 넣어주면 된다.

msg는 answer에 추가한 문자열 만큼 슬라이싱 해준다.

그리고 없었던 문자열 KAK는 eng에 넣어준다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31