코테/문제풀이

[알고리즘] 11655 ROT13 C++

내가 그린 코딩 그림 2023. 1. 15. 17:10
반응형

 

 

문자열을 지정받아 아스키 코드를 활용하면 된다.

 

char a = s[i];

형식으로 지정하는 경우 아스키코드값을 넘어가게 되면 문자열이 깨지기 때문에

int로 정의해 마지막에 char로 바꿔주는 첫번째와 같은 방법은 정답이 될 수 있지만 두 번째의 경우 정답이 될 수 없다.

 

 

정답이 되는 경우

#include <bits/stdc++.h>
using namespace std;
// A = 65 , Z = 90, a = 97 , z = 122

string s; // 주어지는 문자열
string rot13;
int bigA = 'A', bigZ = 'Z', smallA = 'a', smallZ = 'z';
int main() {
	getline(cin, s);
	
	for(int i=0; i<s.length(); i++) {
		int a = s[i];
		
		if(a >= bigA && a <= bigZ) { // 대문자인 경우 
			a += 13;
			if(a > bigZ) {
				a -= 26;
			}
						
		}else if(a>=smallA && a<=smallZ) { // 소문자인 경우 
			a += 13;
			if(a > smallZ) {
				a -= 26;
			}
		}
		cout << (char)a;
		
	}
	
	return 0;
} 

/*
char a 형식으로 지정한 경우
숫자가 아스키코드 값을 넘어가게 되면 깨지는 현상이 발생한다.
 
*/

 

 

정답이 안되는 경우

#include <bits/stdc++.h>
using namespace std;
// A = 65 , Z = 90, a = 97 , z = 122

string s; // 주어지는 문자열
string rot13;
int bigA = 'A', bigZ = 'Z', smallA = 'a', smallZ = 'z';
int main() {
	getline(cin, s);
	
	for(int i=0; i<s.length(); i++) {
		char a = s[i];
		
		if(a >= bigA && a <= bigZ) { // 대문자인 경우 
			a += 13;
			if(a > bigZ) {
				a -= 26;
			}
						
		}else if(a>=smallA && a<=smallZ) { // 소문자인 경우 
			a += 13;
			if(a > smallZ) {
				a -= 26;
			}
		}
		cout << a;
		
	}
	
	return 0;
} 

/*
char a 형식으로 지정한 경우
숫자가 아스키코드 값을 넘어가게 되면 깨지는 현상이 발생한다.
 
*/
반응형