Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 2_[3차] 압축 (2018 KAKAO BLIND RECRUITMENT)

syunze 2023. 10. 11. 14:53

📌문제 유형

2018 KAKAO BLIND RECRUITMENT

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

- check 함수에서 가장 긴 문자열 w 찾기

  • 사전에 없는 단어일 경우, 그 전 인덱스 문자열까지를 리턴

- w+c 사전 등록 시, msg 문자열 길이를 넘어가지 않을 때만 사전에 등록

  • 넘어가면 while문 자체를 종료
def check(now_char,msg,i,idx,char_dict):
    now_char = msg[i:i+idx]

    if now_char not in char_dict.keys() or i+idx == len(msg)+1:
        return msg[i:i+idx-1]
    else:
        return check(now_char,msg,i,idx + 1,char_dict)
    

def solution(msg):
    answer = []
    char_dict = {'A':1, 'B':2, 'C':3 ,'D':4, 'E':5, 'F':6, 'G':7, 'H':8, 'I':9, 'J':10,
                'K':11, 'L':12, 'M':13, 'N':14, 'O':15, 'P':16, 'Q':17, 'R':18,'S':19,
                'T':20, 'U':21, 'V':22, 'W':23, 'X':24, 'Y':25, 'Z':26}
    i = 0
    while True: 
        if i == len(msg)+1:
            break
        now_char = msg[i]
    
        now = check(now_char,msg,i,1,char_dict)  
        answer.append(char_dict[now])

        if i + len(now) < len(msg):
            char_dict[now + msg[i + len(now)]] = list(char_dict.values())[-1] + 1
        else:
            break
        i = i + len(now)

    return answer

 

📌다른 사람의 문제풀이

def solution(msg):
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    d = {k:v for (k,v) in zip(alphabet, list(range(1,27)))}
    answer = []

    while True:
        if msg in d:
            answer.append(d[msg])
            break
        for i in range(1, len(msg)+1):
            if msg[0:i] not in d:
                answer.append(d[msg[0:i-1]])
                d[msg[0:i]] = len(d)+1
                msg = msg[i-1:]
                break

    return answer

 

📌리뷰

- 딕셔너리 만들 때, {k:v for (k,v) in zip(alphabet, range(1,27))} 적용하기

- 놓친 부분 : 현재 입력과 일치하는 가장 긴 문자, while문 맨 뒷부분 처리

- check 함수에서 가장 긴 문자열 w 찾기

  • 재귀함수에서 주의할 점 : 재귀에서 return 안해주면 none 나옴. 꼭꼭 답과 재귀함수 모두 return 해주기

- while문 처리

  • 항상 끝에 어떻게 처리할지 확인하기 꼭꼭!

(어렵지 않은 문제인데 사소한 구현으로 시간 많이 씀) 

728x90