압축
코딩테스트 연습 - [3차] 압축
TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]
programmers.co.kr
- 내 풀이
- 대문자 'A'~'Z' 리스트 삽입
- 색인 번호가 인덱스가 되도록 0번에는 숫자 0을 채움
- 아스키코드 대문자 65~90/ 소문자 97~122
- 숫자→ 아스키코드 : chr(n)
- 풀이 방법
- 현재 단어가 사전에 없을 경우
- 있을 경우
- 다음 단어를 붙인 단어가 사전에 있을 경우
- 단어를 이어서 붙임
- 없을 경우
- 현재까지의 단어를 사전에 등록
- 다음 단어를 붙인 단어도 사전에 등록
- 단어 리셋
- 다음 단어를 붙인 단어가 사전에 있을 경우
- 대문자 'A'~'Z' 리스트 삽입
def solution(msg):
#아스키코드 대문자 65~90/ 소문자 97~122
dic=[chr(64+i) if i!=0 else 0 for i in range(27) ]
answer=[]
word=''
for i,m in enumerate(msg):
word+=m
if i==len(msg)-1:
answer.append(dic.index(word))
break
if word not in dic:
dic.append(word)
answer.append(dic.index(word))
else:
if word+msg[i+1] in dic:
continue
else:
answer.append(dic.index(word))
word+=msg[i+1]
dic.append(word)
word=''
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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 2] [2018 KAKAO BLIND RECRUITMENT 3차] 방금그곡 (0) | 2022.06.20 |
|---|---|
| [프로그래머스] [Level 2] [다이나믹 프로그래밍] 가장 큰 정사각형 찾기 (0) | 2022.06.20 |
| [프로그래머스][Level 2] 영어 끝말잇기 (0) | 2022.06.15 |
| [프로그래머스] [Level 2] N-Queen(백트래킹) (0) | 2022.06.11 |
| [프로그래머스] [Level 2] [2018 KAKAO BLIND RECRUITMENT 3차] 파일명 정렬 (0) | 2022.06.03 |