{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉문자열〉회전 로터 통신문← 이전다음 →
#071 · 문자열쉬움문자열 / 모듈로 연산

회전 로터 통신문

문제

관측소 무전기는 글자를 한 칸씩 밀어 보내는 대신, 글자를 보낼 때마다 로터가 한 칸씩 더 돌아갑니다. 그래서 문자열 s 의 i 번째 문자(0부터 시작)에 적용되는 밀기 폭은 n + i 가 됩니다.

전송할 원문 s 와 로터의 초기값 n 이 주어질 때, 암호화된 통신문을 반환하세요.

  • i 번째 문자가 알파벳이면 알파벳 순서로 n + i 칸 뒤로 밉니다.
  • z 다음은 a 로, Z 다음은 A 로 돌아옵니다. 대문자는 대문자로, 소문자는 소문자로 유지됩니다.
  • 알파벳이 아닌 문자(숫자, 공백, -)는 밀지 않고 그대로 둡니다. 단, 위치 i 는 그런 문자도 포함해서 셉니다.
solution(s: string, n: number): string

예시

s n 반환값
"CODE" 0 "CPFH"
"zzzz" 1 "abcd"
"night owl" 5 "sonpc ziy"
"Route 66" 13 "Ecjjv 66"

"CODE", n=0 의 계산 과정 (밀기 폭이 0, 1, 2, 3 으로 커집니다):

C + 0 = C
O + 1 = P
D + 2 = F
E + 3 = H

"Route 66", n=13 에서는 공백과 숫자가 그대로 남지만, 그 자리도 위치 계산에는 포함됩니다.

제약 조건

  • 1 ≤ s.length ≤ 20,000
  • 0 ≤ n ≤ 1,000
  • s 는 영문 대/소문자, 숫자, 공백, 하이픈(-) 으로 구성됩니다
  • 밀기 폭 n + i 가 26 이상이면 26 으로 나눈 나머지만큼 민 것과 같습니다

시간 복잡도 목표: O(N)

테스트 케이스

예시 1: 초기값 0, 위치마다 0/1/2/3칸
입력: s = "CODE", n = 0
출력: "CPFH"
예시 2: z에서 한 바퀴 돌아 a부터 시작
입력: s = "zzzz", n = 1
출력: "abcd"
예시 3: 공백도 위치 계산에 포함
입력: s = "night owl", n = 5
출력: "sonpc ziy"
예시 4: 숫자는 그대로, 대소문자 유지
입력: s = "Route 66", n = 13
출력: "Ecjjv 66"
하이픈이 섞인 경우
입력: s = "a-b-c", n = 25
출력: "z-c-f"
n이 26보다 훨씬 큰 경우
입력: s = "m", n = 1000
출력: "y"
n이 정확히 26이라 첫 글자는 제자리
입력: s = "Zz", n = 26
출력: "Za"
두 단어 혼합
입력: s = "Signal Lost", n = 3
출력: "Vmltht Vzeg"
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.