728x90
728x90
https://www.acmicpc.net/problem/5598
문제
가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건너뛰어 적었다고 한다.
26개의 대문자 알파벳으로 이루어진 단어를 카이사르 암호 형식으로 3문자를 옮겨 겹치지 않게 나열하여 얻은 카이사르 단어가 있다. 이 카이사르 단어를 원래 단어로 돌려놓는 프로그램을 작성하시오.
각 문자별로 변환 전과 변환 후를 나타낸 건 아래와 같다.
변환전 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
변환후 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
예를 들어서, 이 방법대로 단어 'JOI'를 카이사르 단어 형식으로 변환한다면 'MRL'을 얻을 수 있고, 앞의 예와 같은 방법으로 얻은 카이사르 단어 'FURDWLD'를 원래 단어로 고치면 'CROATIA'가 된다.
입력
입력은 한 줄로 이루어져 있으며, 그 한 줄에는 대문자 알파벳으로 구성된 단어가 1개 있다. 단어는 최대 1000자 이하이다.
출력
입력받은 카이사르 단어를 원래 단어로 고친 걸 출력하시면 된다.
풀이
머리 식힐 겸 푼 문제
올릴까 말까 고민하다 아스키코드 모르면 노가다해야하는 문제라서 올린다.
A 아스키코드는 65, Z 아스키코드는 90이다. 즉, 아스키코드에서 3만 빼주면 입력받은 카이사르 단어를 원래 단어로 고칠 수 있다. 예외로 A,B,C는 빼버리면 다른 문자가 나오기 때문에 26을 더해주면 X,Y,Z를 얻을 수 있다.
#include <bits/stdc++.h>
using namespace std;
int main() {
string str;
cin >> str;
for (int i = 0; i < str.size(); i++) {
char tmp = str[i] - 3;
if (tmp < 65) { //A or B or C
tmp += 26;
}
cout << tmp;
}
}
728x90
728x90
'Algorihtm > BOJ' 카테고리의 다른 글
C++ 백준 13904번: 과제 (0) | 2023.01.22 |
---|---|
C++ 백준 9375번: 패션왕 신해빈 (0) | 2023.01.21 |
C++ 백준 12904번: A와B (0) | 2023.01.18 |
C++ 백준 1026번: 보물 (0) | 2023.01.15 |
C++ 백준 1940번: 주몽 (0) | 2023.01.13 |