둘만의 암호

Sheryl Yun·2023년 7월 17일
0

문제 링크

처음 풀이

  1. 전체 알파벳 배열 선언 (상수이므로 함수 바깥에 선언)
  2. 알파벳 상수에서의 s가 시작하는 인덱스로 alphabetIndex 시작
  3. alphabets을 alphabetIndex번째부터 시작해서 순환
    • 도중에 alphabets[alphabetIndex]가 'z'가 되면 alphabetIndex를 0('a')으로 초기화
  4. alphabets이 skip 배열에 없으면 alphabetIndex에 1 추가, 있으면 0 추가
  5. alphabetIndex가 index와 동일해지면 리턴
  6. alphabets의 alphabetIndex번째 문자를 answer에 추가

=> 문제점: 출력되는 answer가 hkpy에서 더 이상 바뀌지 않았다.
'index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아간다'와 관련된 예외 처리가 안 됐다.

새로운 풀이

  • 핵심: Set 자료구조를 사용해서 skip되는 알파벳을 모두 제거한 후 시작
  • 마지막 알파벳 z일 때 다시 첫 알파벳 a로 돌아가는 순회 구조는 나눈 나머지(%)를 구해서 가능
  • Set을 쓰면 요소를 삭제하기 쉬워지고, 중복을 없앨 수 있다.
  1. 전체 알파벳 문자열을 Set 자료 구조로 생성

    • new Set() 객체 안에 Set으로 바꿀 문자열을 추가
    • 또는 new Set().add('')로 추가 가능
    • 그 외 기능: has(원소를 갖고 있는지 여부), .size(length 구하기, 메서드 아님)
  2. skip 문자열을 배열로 바꾼 뒤 순회하며 알파벳 Set에서 skip 문자 제거

  • ** spread를 사용하면 문자열이나 Set을 배열로 만들 수 있다.
  1. index가 더해진 최종 인덱스 구하기: s 문자열에서 하나씩 꺼낸 문자를 배열로 바꾼 알파벳 Set에서 인덱스를 찾고
    index를 더해서 최종 인덱스(= index만큼 뒤의 알파벳의 위치)를 구함

  2. index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아오기: 구한 최종 인덱스를 알파벳 배열의 전체 길이로 나눈 '나머지'를 구함

  3. 알파벳 전체 배열에서 '나머지' 인덱스를 찾아 answer 문자열에 추가

[ 나머지 연산자를 순환에 활용하는 원리 ]

  • skip을 제외한 총 22개 알파벳 중 index를 더한 최종 인덱스가 22(마지막 알파벳)가 되었을 경우,
    전체 알파벳 갯수인 22로 나누면 나머지가 0, 즉 맨 처음 원소('a')를 가리키게 된다.


    ** 이틀 간 면접이 2회 있어서 7/17 하루는 예전 코테 풀이를 업로드합니다.

profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

정말 좋은 글 감사합니다!

답글 달기