RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00943

시프트를 찾아라

Bronze I 브론즈 I
난이도
2s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

가로채어진 비밀 메시지는 모든 글자를 알파벳에서 \(k\)칸 뒤로 민 방식으로 암호화되어 있다(\(z\) 다음은 다시 \(a\), 공백은 그대로). 문제는 \(k\)를 모른다는 것이다.

다행히 원문에 반드시 들어 있는 단어 \(W\)를 하나 알고 있다. \(k = 0, 1, \dots, 25\)를 차례로 시도하여, 복호화한 문장에 \(W\)하나의 단어로 나타나는 가장 작은 \(k\)를 찾고, 그 \(k\)로 복호화한 문장을 출력하여라. 그런 \(k\)는 항상 존재한다.

제약

\(W\)의 길이는 \(1\) 이상 \(20\) 이하이다. 암호문의 길이는 \(1\) 이상 \(500\) 이하이고, 단어는 \(1\)개 이상 \(50\)개 이하이다. 조건을 만족하는 \(k\)가 적어도 하나 존재한다.

입력 형식

첫째 줄에 단어 \(W\)가 주어진다.

둘째 줄에 암호문이 주어진다. 암호문은 영어 소문자 단어들이 공백 한 칸씩으로 구분된 형태이다.

출력 형식

첫째 줄에 찾은 가장 작은 시프트 \(k\)를 출력한다.

둘째 줄에 그 \(k\)로 복호화한 문장을 출력한다.

예제 1
입력
meet
nffu bu ebxo
출력
1
meet at dawn
설명

한 칸 되돌리면 meet at dawn이 되고, 그 안에 meet이 있으므로 시프트는 \(1\)이다.

예제 2
입력
code
the code is safe
출력
0
the code is safe
설명

시프트 \(0\)에서 이미 code가 보인다. 가장 작은 시프트는 \(0\)이다.

힌트

막혔나요? 코인으로 단계별 힌트를 잠금 해제하세요 — 첫 힌트는 가벼운 방향 제시, 뒤로 갈수록 더 많이 알려 줍니다. 문제를 풀면 모든 힌트가 무료로 공개됩니다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

시프트를 찾아라

개요
출제자 난이도 Bronze I 브론즈 I 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

시프트를 찾아라

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8