반응형
문제
https://www.acmicpc.net/problem/11655
풀이 과정
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 |