728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
- 딕셔너리로 사전을 생성한다. d = {}
- 1부터 26까지 반복하며 for i in range(1, 27)
- 영문자 A부터 Z까지를 키로 하여 숫자를 저장한다. d[chr(i + 64)] = i
- 현재 첫 글자 위치를 저장할 변수를 생성하고 초기화한다. now = 0
- 현재 첫 글자가 단어의 길이를 넘어가기 전까지 반복한다. while (now < len(msg))
- 문자열 길이를 저장할 변수를 생성하고 1로 초기화한다. cnt = 1
- 현재 단어의 마지막 글자 위치를 저장할 변수를 생성하고 첫 글자 위치로부터 문자열 길이를 더한 위치로 저장한다. next = now + cnt
- 단어에서 문자열을 추출하고 해당 문자열이 사전에 있을 때 while (msg[now : next + cnt] in d)
- 만약 그다음 위치가 단어의 길이를 넘어가면 if (next + cnt > len(msg))
- 단어의 끝을 넘어갔으므로 종료한다. break
- 반면에 단어의 길이 안에 있다면 다음 글자까지 판별을 해야 하므로 문자열 길이를 1 증가시킨다. cnt += 1
- 문자열의 마지막 위치를 첫 글자 위치에 문자열 길이를 더한 값으로 저장한다. next = now + cnt
- 문자열에 해당하는 번호를 정답 리스트에 추가한다. answer.append(d[msg[now : next]])
- 문자열에 한 글자를 추가한 문자열을 사전에 추가한다. d[msg[now : next + 1]] = i + 1
- 다음 찾을 문자열의 첫 글자 위치를 전 문자열의 마지막 글자 위치로 설정한다. now = next
- 사전에 추가했으므로 다음 위치로 넘어간다. i += 1
반응형
3. 소스코드
def solution(msg):
answer = []
d = {}
for i in range(1, 27):
d[chr(i + 64)] = i
now = 0
while (now < len(msg)):
cnt = 1
next = now + cnt
while (msg[now : next + cnt] in d):
if (next + cnt > len(msg)):
break
else:
cnt += 1
next = now + cnt
answer.append(d[msg[now : next]])
d[msg[now : next + 1]] = i + 1
now = next
i += 1
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 더 맵게 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.12 |
---|---|
[프로그래머스] [3차] n진수 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.11 |
[프로그래머스] [1차] 다트 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.10 |
[프로그래머스] 야근 지수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.09 |
[프로그래머스] 기사단원의 무기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.07 |
[프로그래머스] 네트워크 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.06 |
[프로그래머스] k진수에서 소수 개수 구하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.05 |
[프로그래머스] 최고의 집합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (1) | 2023.08.04 |