728x90
코딩테스트 연습 - 둘만의 암호 | 프로그래머스 스쿨 (programmers.co.kr)
이번 문제는 정말 배울 게 많은 문제였다.
팀원에게 설명하면서 스스로도 생각을 많이 해보고, 다른 사람의 코드를 보면서도 많이 배운 문제였다.
# 네비게이터로 참여한 문제
# 팀원 분의 문제 접근 방식
# 문자열skip에 포함되어 있는 알파벳은 순서에서 제외
# 문자열s의 각 알파벳 판별 for문
# index만큼의 뒷순서 알파벳으로 반환
# z를 넘어가면 다시 a부터 시작
# 결과값 리턴
def solution(s, skip, index):
alphabet = 'abcdefghijklmnopqrstuvwxyz'
answer = ''
# 빈 문자열에 정답을 하나씩 덧붙이는 형식! 자주 써먹었지
for j in skip:
if j in alphabet:
alphabet = alphabet.replace(j,'')
# 스킵 안에 있는 알파벳들을 점프시키기 위해
# alphabet 문자열에서 스킵 문자열을 제거해주는 과정(for문을 이용한 replace 함수)
for i in s:
# alphabet[alphabet.index(i)] = i
n = alphabet[(alphabet.index(i) + index)%len(alphabet)]
answer += n
# s 안의 알파벳들을 index만큼 더해주는 작업
# 문자열 index를 이용해서 더해주는 작업
# + 그러나 alphabet 문자열은 범위 한계가 존재
# (index) 나누기 (alphabet 문자열 길이) 식을 통해서
# 몫은 몇 바퀴를 돌았다는 뜻이니까 몫은 버리고
# 나머지 값이 제대로 된 index를 의미하기 때문에 % 연산자 사용
return answer
아스키코드라는 것이 있다는 것을 이번에 알았다.
그래서 이 참에 공부하려고 켰는데.. 생각보다 내용이 많아서 금방 정리가 안 될 것 같다.
# ascii 함수를 이용한 작업
import string
def solution(s, skip, index):
alphabet = string.ascii_lowercase
# alphabet = 'abcdefghijklmnopqrstuvwxyz'
answer = ''
for j in skip:
if j in alphabet:
alphabet = alphabet.replace(j,'')
for i in s:
# alphabet[alphabet.index(i)] = i
n = alphabet[(alphabet.index(i) + index)%len(alphabet)]
answer += n
return answer
아래 식은 다른 분이 풀은 문제인데.. 사실 윗 작업이 왜 이루어지는지 이해하기가 어렵다.
아는 함수로만 진행했음에도 이렇게 된다는 게 신기할 따름
from string import ascii_lowercase
def solution(s, skip, index):
result = ''
a_to_z = set(ascii_lowercase)
a_to_z -= set(skip)
a_to_z = sorted(a_to_z)
# 여기는 뭐지?
l = len(a_to_z)
dic_alpha = {alpha:idx for idx, alpha in enumerate(a_to_z)}
# dic_alpha라는 dic 생성
# alpha 라는 key값, idx라는 value값 생성
# a_to_z 리스트에서 alpha(key)와 index(value)를 동시에 순차적으로 꺼내오기(enumerate 함수)
for i in s:
result += a_to_z[(dic_alpha[i] + index) % l]
# s에서 문자를 하나씩 빼내어 자연수(index)를 더해주는 작업. 마찬가지로 나누기 len(a_to_z)
return result
'cording test' 카테고리의 다른 글
LV.2 괄호 회전하기 (0) | 2023.05.07 |
---|---|
LV.1 예산 (0) | 2023.05.07 |
LV.1 비밀지도/ 파이썬 bin함수 / zfill 함수 (0) | 2023.05.02 |
LV.2 최댓값과 최솟값 (4) | 2023.04.28 |
LV.1 피보나치 수 (2) | 2023.04.27 |