본문 바로가기
Develop/백준 (Cpp)

[백준] 2609번 : 최대공약수와 최소공배수 (C++)

by Tarra 2023. 2. 3.

10984번: 내 학점을 구해줘


문제 )

가이우스 율리우스 카이사르(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자 이하이다.

 

 

 

출력 :

입력받은 카이사르 단어를 원래 단어로 고친 걸 출력하시면 된다.

 

 

 

 

 

풀이)

이 문제는 입력값을 +3 시키는 문제가 아니라, 반대로 -3을 시켜 해독하는 문제임을 알고 가야한다.

 

그 이후에는 A ~ C까지의 문자는 알파벳 대문자의 영역을 벗어났으므로

 

알파벳의 갯수인 26을 더해 출력하면 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string word;
    cin >> word;
 
    for (int i = 0; i < word.length(); i++) {
        if (word.substr(i, 1>= "A" && word.substr(i, 1<= "C") {
            cout << char(word[i] - 3 + 26);
        }
        else {
            cout << char(word[i] - 3);
        }
    }
    
    return 0;
}
 
cs

출처 : https://www.acmicpc.net/problem/5598 

 

5598번: 카이사르 암호

가이우스 율리우스 카이사르(Gaius Julius Caesar)는 고대 로마 군인이자 정치가였다. 카이사르는 비밀스럽게 편지를 쓸 때, 'A'를 'D로', 'B'를 'E'로, 'C'를 'F'로... 이런 식으로 알파벳 문자를 3개씩 건

www.acmicpc.net