#2
Bronze I
Caesar
ANIGMA

문제 제공 코드 (Reference Code)

ANIGMA 문제를 해결하기 위한 참조 코드를 다운로드하세요.

다운로드
시간 제한
1s
메모리 제한
256MB
제출
60
정답
39
맞힌 사람
13
정답 비율
65.0%

CAESAR

1. 문제

1.1 문제 상황

로마의 지도자 율리우스 카이사르(Julius Caesar)는 개인 서신을 작성할 때 간단한 암호 기법을 사용한 것으로 알려져 있다. 로마의 역사가 수에토니우스의 기록에 따르면, 카이사르는 글자를 일정한 수(NN)만큼 뒤로 미는 방식의 치환 암호를 사용했으며, 특히 N=3N=3을 적용한 사례가 유명하다. 이 암호는 오늘날 카이사르 암호 또는 시저 암호 로 불리며, 구조는 단순하지만 당시에는 암호화 개념이 널리 알려지지 않아 기본적인 은밀성 확보에는 충분했다. 이러한 기법은 고대 문헌에 명확히 기록된 가장 초기의 암호화 방식 중 하나로 평가되며, 이후 발전한 암호학의 기초가 되었다.

제공된 코드는 커스텀 Caesar 암호화/복호화 유틸리티 프로그램이다. 이 프로그램은 지정된 모드(ENCODE 또는 DECODE)와 이동 거리(NN)를 적용하여 입력 문자열을 변환한다. 그러나 제공된 코드에는 결함이 존재한다. 여러분은 그 이유를 찾고 수정하여 프로그램을 완성하자.

1.2 입력

첫째 줄에 모드(ENCODE 또는 DECODE)가 주어진다.
둘째 줄에 정수 이동거리 NN이 주어진다. (N100)(|N| \leq 100)
셋째 줄에 변환할 문자열 SS가 주어진다. (1S100, S[azAZ09.!?]+)(1 \leq |S| \leq 100,\ S ∈ [a-zA-Z0-9.!?]+)

1.3 출력

출력은 예시와 같은 형식이다.
상세한 출력은 main.py 파일을 참고한다.

1.4 입력 예시

ENCODE
3
HelloWorld!

1.5 출력 예시

--- [MODE: CaesarEncode] ---

[실행 정보]
모드: ENCODE
이동 거리 (N): 3
원본 문자열 (S): 'HelloWorld!'
암호화된 문자열: 'EhoorTruog2'

2. 평가 테스크

제공된 코드에는 실행 중 오류가 내장되어 있다.

Task1 결함 유발 입력값 찾기 (Bug Hunting)

제공된 코드가 실행 중 오류로 인해 비정상적인 프로그램 종료를 유발하는 입력을 찾아 제출해야 한다.

Task2 결함 코드 수정하기 (Patch)

Task1에서 발견하거나 추정한 결함을 해결하기 위해 제공된 코드 파일을 수정해야 한다.
목표는 제한 범위 내 모든 입력에 대해 정확한 값을 계산하여 출력하도록 수정해야 한다.


3. 참고

3.1 Caesar 암호 체계

알파벳을 일정한 거리만큼 평행 이동하여 암호문을 만드는 단순 치환 암호이다. 예를 들어 키 값이 3이면, 평문에서 A는 D로, B는 E로 치환된다. 알파벳의 끝에 도달하면 다시 처음으로 순환하여 매핑한다. 복호화는 반대로 같은 거리만큼 이동해 원래 문자를 복원하는 방식으로 이루어진다.

3.2 디자인 패턴

프로그램은 전략(Strategy) 패턴을 사용하여 인코딩/디코딩 로직을 분리하고, CipherContext를 통해 전략을 적용한다.

  • main.py: 실행 진입점
  • settings.py: 알파벳 크기 등 상수 정의
  • cipher_strategies.py: CaesarEncodeStrategy, CaesarDecodeStrategy 등의 핵심 로직 구현
  • context.py: CipherContext 구현

문제를 만든 사람
202102659_안우진
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출
제출 내역이 없습니다.
맞은 사람
#순위사용자언어시간메모리코드 길이
185🥇
뭐로하지
C++14ms9612KB20B
16🥈
Tester4
C++16ms9660KB20B
172🥉
인공라스트댄스
C++16ms9728KB20B
2354
두 사람은 문제아지만 최강
C++16ms9748KB10B
475
Tester6
C++16ms9784KB20B
1746
재순이야마카다
C++16ms9804KB20B
677
Tester5
C++16ms9872KB10B
1778
안녕하세요컴차박준혁입니다아쉽게도라식을하게되어따까리두명을보냈으니많은관심부탁드립니다
C++16ms9944KB20B
2989
컴파일
C++16ms9956KB10B
410
ana
C++16ms10088KB10B
21911
기묘한 이야기
C++17ms9592KB20B
552412
최민우
C++17ms9792KB-
8213
Tester8
C++17ms9868KB20B
난이도 투표
Bronze I1명 투표· 약 2개월 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
#사용자문제결과언어시간메모리코드 길이제출 시간
5524
맞았습니다 (30점)
ANIGMA (Task 1)17ms9792KB-2026. 04. 21. 11:29
5523
맞았습니다 (70점)
ANIGMA (Task 2)17ms9872KB-2026. 04. 21. 11:29