BOJ/Silver

[BOJ] #6616 문자열 암호화

Opal1031 2026. 4. 13. 11:15

문자열 암호화

백준 #6616


📌 문제

예제 입력

2
CTU Open Programming Contest
7
This is a secret message that noone should ever see Lets encrypt it
15
text too short
0

예제 출력

CMTMUIONPGECNOPNRTOEGSRTA
TESNUECHCAOLERIRGODLYSEENEEPITTEVTTSMHSESIAEAHRETSSTOSN
TEXTTOOSHORT

📌 풀이

Logic

  • 정수 N 입력 받기
    • 0 입력 시 프로그램 종료
  • 평문 입력 받기 및 리스트 초기화(Cipher)
  • Cipher의 현재 index에 평문의 텍스트를 순서대로 입력
    • 마지막 인덱스까지 모두 채워졌다면, start_idx를 1 증가
    • 해당 위치를 now_index로 설정 후 텍스트 입력
  • 공백 없는 텍스트로 Cipher을 출력
# 변수명
N : 입력한 정수값
text : 입력한 평문
Cipher : 암호문 저장 리스트
start_idx : Cipher에서 입력의 기준이 되는 지점의 index 번호
now_idx : Cipher에서 현재 값을 입력할 index 번호

Python

import sys

while True:
    N = int(sys.stdin.readline())

    if (N == 0):
        break

    text = list(sys.stdin.readline().strip().upper().replace(" ", ""))

    Cipher = [""] * len(text)
    start_idx = 0
    now_idx = 0

    for i in range(len(text)):
        if (now_idx >= len(text)):
            start_idx += 1
            now_idx = start_idx

        Cipher[now_idx] = text[i]
        now_idx += N  

    print("".join(Cipher))

✏️ 새로운 내용

join()

매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수

"구분자".join(리스트)
first = "".join(reversed(word[:i]))
second = "".join(reversed(word[i:j]))
third = "".join(reversed(word[j:]))

answer.append(first + second + third)

📚 회고

💡 join() 함수

  • 이전에 문제 풀이를 하면서 공부했었던 내용이지만, 포스트 작성을 시작한 이후 오랜만에 다뤘던 내용이기에 다시 한 번 돌아보는 시간을 가졌다.
  • 중요한 점은 join()은 리스트가 아니라 구분자 문자열에서 호출된다.
  • 반복문을 사용하는 것보다 간결하고 효율적인 방식이므로, 문자열 처리가 많은 문제에서는 습관적으로 활용할 수 있도록 익숙해질 필요가 있다.

'BOJ > Silver' 카테고리의 다른 글

[BOJ] #1439 뒤집기  (0) 2026.04.13
[BOJ] #1769 3의 배수  (1) 2026.04.13
[BOJ] #1699 제곱수의 합  (0) 2026.04.12
[BOJ] #2502 떡 먹는 호랑이  (0) 2026.04.12
[BOJ] #9095 1, 2, 3 더하기  (0) 2026.04.12