프로그래머스 - 압축

Dean_Kang·2021년 7월 7일
0

프로그래머스

목록 보기
13/21

문제

2018카카오 블라인드 채용 코딩테스트에 출제되었던 문제이다.

  • 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
  • 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
  • w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
  • 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
  • 단계 2로 돌아간다.

위 조건을 만족하도록 구현만 하면 되는 문제인데 입력의 첫번째 문자와 일치하는 문자열 중 가장 길이가 긴 문자열을 찾는 것에 좀 시간이 오래걸렸다.

코드

def solution(msg):
    mark = {"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}
    answer = list()
    w, c = 0, 0
    while True:
        if c == len(msg):
            answer.append(mark[msg[w:c]])
            break
        elif msg[w:c+1] in mark:
            c += 1
        else:
            answer.append(mark[msg[w:c]])
            mark[msg[w:c+1]] = len(mark)+1
            w = c

    return answer

mark라는 딕셔너리에 msg[w:c+1]이 존재하지 않을 때까지 c를 1씩 늘려가다가 존재하지 않으면 새로 딕셔너리에 추가 해주는 방식으로 해결했는데 mark를 초기화 하는 과정에서 나는 파이썬에서는 c언어 처럼 안쓸려고 하다보니까 아스키 코드를 파이썬에서도 쓸 생각을 못하고 있었는데

    mark = dict()
    for i in range(0,26):
        mark[chr(65+i)] = i+1

이런식으로 간단히 초기화 해줄 수 있었다.

풀고나서

프로그래머스 레벨2를 페이지에 있는 순서대로 풀고 있는데 카카오에 출제되었던 문제들은 문제 자체는 풀 수 있을 것처럼 생각이 드는데 막상 코드를 짜면 어디선가 로직이 정확하지 않아서 풀기가 어렵다. 더욱 세심하게 로직을 구성하고 짜는 노력을 많이 해야겠다.

profile
for the goal

0개의 댓글

관련 채용 정보