↓ 코딩테스트 사이트 ↓
코딩테스트 연습 | 프로그래머스 스쿨 (programmers.co.kr)
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
'둘만의 암호' 문제를 언어 python으로 설정하여 풀어보았다!
밑에 코드와 풀이가 있으니 답을 원치 않는 사람은 위 사이트에 들어가서 직접 해보시길 바란다!!!
[ 둘만의 암호 ]
- 난이도 : Lv. 1
※ 문제 설명 ※
두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return 하도록 solution 함수를 완성해 주세요.
제한사항
5 ≤ s의 길이 ≤ 50
1 ≤ skip의 길이 ≤ 10
s와 skip은 알파벳 소문자로만 이루어져 있습니다.
skip에 포함되는 알파벳은 s에 포함되지 않습니다.
1 ≤ index ≤ 20
입출력 예
s | skip | index | result |
"aukks" | "wbpd" | 5 | "happy" |
↓ Python 코드 ↓
# s: 알파벳 문자열, skip: 제외하는 알파벳, index: 알파벳을 바꿔줄 인덱스
def solution(s, skip, index):
answer = ""
abc = "abcdefghijklmnopqrstuvwxyz"
for i in abc:
if i in skip:
abc = abc.replace(i, '')
# x는 abc의 인덱스 번호
for j in s:
x = abc.index(j)
x = x + index
# abc의 크기에 맞게 x를 초기화
while x >= len(abc):
x = x - len(abc)
answer += abc[x]
return answer
먼저 abc라는 변수 안에 "abcd... xyz" 알파벳 문자열을 넣고 for문을 돌려 매개변수 skip에 들어있는
알파벳들을 제거하였다.
밑에 또 다른 for문은 매개변수 s 안의 알파벳과 (skip의 알파벳이 제거된) abc 변수의 알파벳을 비교해
s의 알파벳이 위치하는 인덱스 값을 추출한다.
그다음 매개변수 index 값과 x를 더하여 s의 알파벳 인덱스를 변환시킨다.
while문을 쓰기 전 코드는
if x >= len(abc):
x = x - len(abc)
answer = ""
return answer
여기서 문제는 저 x를 print(abc[x])로 출력하면
h
a
p
p
y
로 다 따로 나왔다. 이를 해결하기 위해 for문 안에 answer를 넣고 돌아갈 때마다 옆에 추가되도록 하였다.
이렇게까지만 하였을 때의 일부 구간에서 런타임오류가 났었따 ㅡ.ㅡ
제한 사항 부분을 다시 보면
skip의 길이는 1에서 10까지이고 index의 길이는 1에서 20까지이다.
만약 index = 20이고 skip = 10일 경우 abc의 최대 길이는 16이고 건너뛸 인덱스는 20이므로
if문을 사용해 한 번만 x를 초기화시킬 경우 IndexOutOfBoundsException 오류가 난다.
따라서 if문 -> while문 수정하여 abc의 최대 len에 맞게 x를 계속해서 초기화시켜줌으로써
모든 오류를 잡을 수 있었다!
-- 느낀 점 --
마지막 런타임 오류는 진짜 몰랐다... 그래도 알고 나니 아~ 오류날만 했네 싶기도 하다.
옆에서 계속 도와주는 친구가 있어 겨우 풀었고 공부가 아직 부족하다는 것을 뼈저리게 느꼈다...
1일 1문제 풀면서 실력 키워야징!! (이래놓고 벌써 하루 밀림)
'Coding Test' 카테고리의 다른 글
[ Coding test ] 가장 가까운 같은 글자 - Java (0) | 2024.01.30 |
---|---|
[ Coding test ] 가운데 글자 가져오기 (Python) (0) | 2023.02.25 |
[ Coding test ] 폰켓몬 (Python) (4) | 2023.02.25 |
[ Coding test ] 가장 가까운 같은 글자 (Python) (0) | 2023.02.25 |
[ Coding test ] 기사단원의 무기 (Python) (2) | 2023.02.23 |
댓글