알고리즘 문제풀이
https://school.programmers.co.kr/learn/courses/30/lessons/155652

둘만의암호

풀이방식

  1. 문자열skip에 포함되어 있는 알파벳은 순서에서 제외
  2. 문자열s의 각 알파벳 판별 for문
  3. index만큼의 뒷순서 알파벳으로 반환
  4. z를 넘어가면 다시 a부터 시작
  5. 결과값 리턴

풀이과정

1.

def solution(s, skip, index):
alphabet = 'abcdefghijklmnopqrstuvwxyz'
answer = ''

알파벳을 스트링 형태로 alphabet 변수에 저장.

2.

def solution(s, skip, index):
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    answer = ''
    for j in skip:
        if j in alphabet:
            alphabet = alphabet.replace(j,'')

제외해야 할 skip의 알파벳들을 하나씩 뽑아서 alphabet에서 없애주기.
skip의 j는 alphabet에 반드시 있을테니 그 값들을 ''을 통해 없앴다.

3.

...
            alphabet = alphabet.replace(j,'')
    for i in s:
        n = alphabet[(alphabet.index(i) + index)]

문자열 s를 for문으로 하나씩 뽑아온다.
skip의 j들을 제거한 alphabet에서, s에서 뽑아온 각 i의 위치(숫자)에 index값을 더하여 나온 int값을 구한다.
이 값은 숫자이고 대괄호를 만나 alphabet[int] 즉, alphabet(j가 제거된)의 int번째 알파벳을 나타낸다.

이 때, int가 j가 제거된 alphabet의 길이보다 크다면 큰 만큼! 다시 a부터 돌아와서 순서를 찾아가야 한다.

ex)
j가 제거된 alphabet이 "abc···yz"이면서 길이가 15일 때, alphabet[(alphabet.index(i) + index) == alphabet(18) 이면,
15번째인 z를 지나 다시 a(16번째)와b(17번째)를 건너 c(18번째)를 출력.

4.

...
answer = ''
...
for i in s:
        n = alphabet[(alphabet.index(i) + index)%len(alphabet)]
        answer += n
    return answer

%는 나머지만! 출력하는 연산자다!!
len을 이용해 j를 제거한 alphabet의 길이를 구하고,
그 길이로 (alphabet.index(i) + index)를 나눴을 때 나머지 값을
alphabet[여기] 에 넣는 코드를 짜서 순서를 맞춰주었다.

전체코드

def solution(s, skip, index):
    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

풀이후기

index()는 하나 하나의 값의 위치를 뜻함 (몰랐음..)
alphabet[alphabet.index(i)] = i (이걸 이해하기 어려웠다)

팀원분이 설명해주셔도 어려웠던 부분이 있어서 스스로 답답했다..
시간이 걸릴 것 같은 부분은 따로 표시해두고 혼자 고민해보면서 포기하지 않았다.
계속 가보자고!!

profile
가보자고

0개의 댓글

관련 채용 정보