처음에 보고 아싸리 뚜두두두 코드를 짜서 냈다. 테스트 케이스는 다 돌아가는데 채점을 해보니까 몇 가지 히든케이스에서 장렬히 실패해서 틀렸다.
ㄴ 자기야... 우리 좋았자나... whyrano...
#include <string>
#include <vector>
using namespace std;
string solution(string s, int n) {
string answer = "";
for(char c : s){
if(65 <= c && c <= 90){ //대문자이면
c = c + n;
if(c > 90){
c -= 26;
}
} else if(97 <= c && c <= 122) { //소문자이면
c = c + n;
if(c > 122) {
c -= 26;
}
}
answer += c;
}
return answer;
}
오늘도 의문사를 당한 베뉴씨
의문사를 당해 화난 나머지 결국 구글링(...😊)을 통해서 해당 오류의 원인을 알아냈다. 바로 데이터 그릇의 용량 때문이었다...
자료형 char은 1byte이므로 -128~127까지의 범위를 가지는데, 당장 소문자 'z'의 아스키 코드값만 122이고, 거기에 n만큼 밀어버리면 127은 훌쩍 넘어버리는 케이스가 생각된다.
그래서 그냥 중간에 4byte인 임시 정수형 tmp를 선언해서, 거기에 담아주고 반환해줬다.
#include <string>
#include <vector>
using namespace std;
string solution(string s, int n) {
string answer = "";
for(char c : s){
int tmp;
tmp = c + n;
if(65 <= c && c <= 90){ //대문자이면
if(tmp > 90){
tmp -= 26;
}
answer += char(tmp);
} else if(97 <= c && c <= 122) { //소문자이면
if(tmp > 122) {
tmp -= 26;
}
answer += char(tmp);
} else { //공백이면
answer += " ";
}
}
return answer;
}