문제
https://school.programmers.co.kr/learn/courses/30/lessons/155652
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
문제풀이 방법은 다음과 같다.
- 일단 알파벳을 a - z까지 나열한 문자열 하나를 준비한다. 이를 case라고 지정한다.
- 해당 case에서 skip에 해당하는 요소를 제거한다.
- 문제 제한 사항에서 index 값이 그렇게 크지 않기 때문에, case 문자열을 넉넉하게 3 ~ 4개로 연이어 붙인다.
마지막 문장이 조금 이해가 되지 않을 것인데 아래 예를 들어 설명하겠다.
만약 abcdefghijklmnopqrstuvwxyz이라는 문자열이 주어졌다고 가정한다. 문제에서는 s로 주어진 문자가 "z"이며 skip 이 "adf" 그리고 index가 5가 주어졌다고 가정한다. 해당 문제 조건에 의해서 skip에 들어있는 문자는 사용하지 못하므로, 이를 제거하면 bceghijklmnopqrstuvwxyz라는 문자열이 만들어진다.
result 값을 구하기 위해서는 z에서 index 값만큼 더한 문자를 찾아야 하는데 z 뒤에는 문자가 없으므로 현재 b에서 다시 출발하여 문자를 찾아가야 한다. 하지만 이 과정을 코드로 작성하기에는 오래 걸릴 것 같아서 제한 사항에 index값이 작다는 점을 이용하여 꼼수를 사용했다.
bceghijklmnopqrstuvwxyz 문자열을 연이어 붙이게 되면 bceghijklmnopqrstuvwxyzbceghijklmnopqrstuvwxyz 이 되는데 해당 문자열에서 처음 나온 문자에서 index 값을 더해 찾으면 원하는 result 값을 작성할 수 있다.
🖥️ main.py
import string
def solution(s, skip, index):
case = list(string.ascii_lowercase)
# 순회하면서 skip 요소 제거
for element in skip:
case.remove(element)
# case 길이를 늘려서 만약 index가 초과 됬을 때 다음 요소를 바로 찾을 수 있게 설정
# 해당 방법을 할 수 있었던 근거 : 제한 사항에서 INDEX 길이가 길지 않음.
case *= 3
answer = ""
for element in s:
answer += case[case.index(element) + index]
return answer
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV1 크레인 인형 뽑기 게임 (0) | 2023.05.19 |
---|---|
프로그래머스 LV1 달리기 경주 (0) | 2023.05.19 |
프로그래머스 LV1 대충 만든 자판 (0) | 2023.05.19 |
프로그래머스 LV1 성격 유형 검사하기 (0) | 2023.05.17 |
프로그래머스 LV1 [1차] 비밀지도 (0) | 2023.05.17 |