관리 메뉴

cococo-coding

5598번. 카이사르 암호 (c++풀이) 본문

[BOJ] 코드 모음/C++_learning 문제집

5598번. 카이사르 암호 (c++풀이)

_dani 2024. 1. 11. 00:13

문제

풀이

우선 카이사르 단어를 string으로 입력받는다.

문제에서 변환전의 알파벳 중 X Y Z 와 그 이외의 알파벳을 분리하여 if-else문으로 나누어준다.

X Y Z 는 변환 후에는 A B C가 되어야하므로, 아스키코드기준으로 23을 더해준다.

나머지 알파벳들은 3씩만 뒤로 밀린 상태이므로, 원상태로 돌리기 위해 아스키코드기준으로 3을 더해준다.

그리고 변환된 단어를 출력해주면 끝이다.


코드

첫번째 코드 

#include <iostream>
using namespace std;

/* 
    1. 단어를 입력받는다.
    2. 카이사르 단어를 원래 단어로 고친다.
    3. 고친 단어를 출력한다.
*/

int main() {
    //1
    string word;
    cin >> word;

    //2
    for (int i = 0; i < word.size(); i++) {
        if (word[i] >= 68 && word[i] <= 90) word[i] = word[i] - 3;
        else word[i] = word[i] + 23;
        cout << word[i]; //3
    }

    return 0;
}

 

두번째 코드(함수ver)

#include <iostream>
using namespace std;

/* 함수ver
    1. 단어를 입력받는다.
    2. 카이사르 단어를 원래 단어로 고친다.
    3. 고친 단어를 출력한다.
*/

void findword(string word) {
    for (int i = 0; i < word.size(); i++) {
        if (word[i] >= 68 && word[i] <= 90) word[i] = word[i] - 3;
        else word[i] = word[i] + 23;
        cout << word[i]; //3
    }
}

int main() {
    //1
    string word;
    cin >> word;

    //2
    findword(word);

    return 0;
}

 

오히려 함수버전으로 만든 두 번째 코드가 코드길이가 더 길다. 하지만 어떤 기능을 사용자정의함수로 만들어서 메인함수 밖으로 빼는 연습을 꾸준히 하기 위해 함수버전으로도 만들어보았다. 

 

첫번째 코드에서 //2 부분을 findword라는 함수로 만들어 main함수 이전에 정의해주었다.

메인함수에서는 카이사르 단어를 입력받는 부분과 findword함수를 호출하는 부분으로 나누어진다.

이때 findword함수에 입력받은 단어word를 매개변수로 넣었다. 

 

findword함수에서는 매개변수로 받은 word를 for문을 이용하여 한 글자씩 원래알파벳으로 변환하고 바로 출력해준다.