반응형

문제

https://www.acmicpc.net/problem/11655

 

11655번: ROT13

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

www.acmicpc.net

풀이 과정

1. 아스키코드로 13자리를 더해준다.

2. 범위가 넘어가면 -26을 하여준다.

 

문제점

string으로 받을 경우, 각 문자는 char형으로 받게 되는데, char형 같은 경우 크기가 1byte고 범위가 -128~127입니다.

그래서 만약 'z'의 경우 122인데 +13을 해주면 136이 되기 때문에 이상한 문자열이 들어가게 됩니다.

이부분 때문에 처음에 더해주고나서 예외처리를 하였으나, 임시적으로 더하진 않은 상태에서 if else를 사용하였습니다.

// 처음 오류난 코드
ch += 13;
if(ch > 122)
	ch -= 26;
    
// 오류 해결한 수정후 코드
if (ch + 13 > 122)
	ch -= 13;
else
	ch += 13;

 

코드 ( C++ )

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

int main() {
	string str;
	getline(cin, str);
	for (auto& ch : str)
	{
		if (ch >= 65 && ch < 91)
		{
			if (ch + 13 > 90)
				ch -= 13;
			else
				ch += 13;
		}
		else if (ch >= 97 && ch < 123)
		{
			if (ch + 13 > 122)
				ch -= 13;
			else
				ch += 13;
		}
		cout << ch;
	}
	return 0;
}
반응형

'Etc > Algorithm' 카테고리의 다른 글

[BOJ] 2559 수열  (0) 2022.07.17
[BOJ]9996번 한국이 그리울 땐 서버에 접속하지  (0) 2022.07.14
[BOJ]2979번 트럭 주차  (0) 2022.07.13
[BOJ]10808-알파벳 개수  (0) 2022.07.12
[BOJ]2309-일곱 난쟁이  (0) 2022.07.11

+ Recent posts