πŸ“ Coding Test Study/Algorithm Problem

[C++][Baekjoon][λ¬Έμžμ—΄] 11655번 ROT13

ibelieveinme 2024. 2. 17. 20:40
728x90

* 문제

 

11655번: ROT13

첫째 μ€„에 μ•ŒνŒŒλ²³ λŒ€λ¬Έμž, μ†Œλ¬Έμž, 곡백, 숫자둜만 이루어진 λ¬Έμžμ—΄ Sκ°€ μ£Όμ–΄μ§„λ‹€. S의 κΈΈμ΄λŠ” 100을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net

 

 

μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ„ ROT13 으둜 μ•”ν˜Έν™”ν•œ λ‚΄μš©μ„ 좜λ ₯ν•˜λ©΄ λ˜λŠ” λ¬Έμ œμ΄λ‹€.

 

 

* λ¬Έμ œν’€μ΄

ROT13은 μ•ŒνŒŒλ²³μ„ 13κΈ€μžμ”© λ°€μ–΄μ„œ λ§Œλ“œλ―€λ‘œ ASCII μ½”λ“œλ‘œ ν‘œν˜„λœ μ•ŒνŒŒλ²³ μˆ«μžμ— 13을 λ”ν•΄μ„œ λ‹€μ‹œ λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•˜λ©΄ λœλ‹€.

이 λ•Œ, z(Z) 값이 λ„˜μ–΄κ°ˆ λ•ŒλŠ” λ‹€μ‹œ a(A) κ°’λΆ€ν„° μΉ΄μš΄νŠΈν•΄μ€˜μ•Ό ν•œλ‹€. ROT13은 μ•ŒνŒŒλ²³ 개수인 26의 μ •ν™•ν•œ 반이기 λ•Œλ¬Έμ— λ‹¨μˆœνžˆ μ•ŒνŒŒλ²³ + 13 κ°’μ—μ„œ 26을 λΉΌμ£Όλ©΄ λœλ‹€.

 

 

* μ•Œμ•„λ‘˜ 것

1) ASCII μ½”λ“œ

https://www.researchgate.net/figure/ASCII-table-for-the-alphabet_fig1_338623532

 

2) int to string

to_string(97);

 

 

3) int to char

μ•”μ‹œμ , λͺ…μ‹œμ  λ³€ν™˜μ΄ κ°€λŠ₯함.

μ•”μ‹œμ  λ³€ν™˜μ€ κ·Έλƒ₯ char ch = 97; ν•˜λ©΄ 되고

λͺ…μ‹œμ  λ³€ν™˜μ€ (char)97; 이러면 λœλ‹€.

 

4) char to int

int a = (int)'a';

 

 

* μ½”λ“œ

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {

	const int SCREAT_NUM = 13;
	const int ALPHABET_NUM = 26;

	const int a = (int)'a';
	const int z = (int)'z';
	const int A = (int)'A';
	const int Z = (int)'Z';

	string str = "";
	
	getline(cin, str);
	for (int i = 0; i < str.size(); i++) {
		//μ†Œλ¬Έμž
		if (str[i] >= a && str[i] <= z) {
			if (str[i] + SCREAT_NUM > z) {
				str[i] = (str[i] + SCREAT_NUM) - ALPHABET_NUM;
			}
			else {
				str[i] += SCREAT_NUM;
			}
		}
		//λŒ€λ¬Έμž
		if(str[i] >= A && str[i] <= Z){
			if (str[i] + SCREAT_NUM > Z) {
				str[i] = (str[i] + SCREAT_NUM) - ALPHABET_NUM;
			}
			else {
				str[i] += SCREAT_NUM;
			}
		}
	}

	cout << str << "\n";
}

 

 

728x90