티스토리 뷰
문제주소
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 = []
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
dictionary = {}
dictIndex = 1;
# 사전 설정하기
for char in alpha:
dictionary[char] = dictIndex
dictIndex +=1
while True:
if len(msg) == 0:
return answer
# 문자열을 사전에서 찾고 설정할 단위 설정
minChar = ""
newChar = ""
for index in range(1,len(msg)+1):
if msg[:index] in dictionary:
minChar = msg[:index]
else:
newChar = msg[:index]
break
# 찾은 문자를 문자열에서 제거해 나가는 방식
answer.append(dictionary[minChar])
dictionary[newChar] = dictIndex
dictIndex +=1
msg = msg[len(minChar):]
return answer
다른 사람 풀이
딕셔너리를 저장하는 방식을 간단하게 할 수 있는 방법이 많았다.
tmp = {chr(e + 64): e for e in range(1, 27)}
myDic = dict( zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ", range(1,27)) )
보통 문자열을 나처럼 단어로 끊지 않고 index 값으로 끊어서 작성하는 경우가 많았다. 계속 동일한 index 정보를 활용할 수 있는 장점이 있는 것 같았다.
사전에 넣을 값을 dictIndex로 두고 증가하는 방식으로 사용했는데 len(dictionary)+1의 방식으로 값을 저장하는 경우가 많았다.
while문을 사용할 때도 if 문으로 종료조건을 선언하는 것보다 while len(msg) >0 : 이런식으로 while문 자체에 선언해 주는 방법을 생각하는 것이 좋을 듯 싶다.
정리
문자열을 [:]의 방식으로 잘라서 사용하는 것과 문제에도 직접적으로 언급된 사전형을 사용하는 것이 이 문제의 핵심이었다.
'Algorithm > 문제풀이 Python' 카테고리의 다른 글
프로그래머스 레벨3 - 카카오 2018 추석트래픽 (0) | 2021.01.09 |
---|---|
프로그래머스 레벨3 - 카카오 2020 자물쇠와 열쇠 (0) | 2021.01.06 |
프로그래머스 레벨2 - 카카오인턴 2020 수식최대화 (0) | 2020.12.31 |
프로그래머스 레벨2 - 카카오 2018 캐시 (0) | 2020.12.30 |
프로그래머스 레벨2 - 카카오 인턴 2019 튜플 (0) | 2020.12.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- TIL
- 카카오
- React
- DB
- 글쓰기미션
- 네트워크
- 개발공부일지
- JS
- OS
- Spring
- java
- 알고리즘
- 코드스쿼드
- 마스터즈코스
- 우테코수업
- Transaction
- CS
- 학습로그
- python
- 내부코드
- 운영체제
- 모의면접준비
- TCP/IP
- 인증
- 우아한테크코스
- 월간회고
- javascript
- 객체지향
- JPA
- 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함