코테/문제풀이
[알고리즘] 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 형식으로 지정한 경우
숫자가 아스키코드 값을 넘어가게 되면 깨지는 현상이 발생한다.
*/
반응형