[프로그래머스 Lv.1] 시저 암호

Sujung Shin·2023년 4월 8일
0

🔗 문제

😒 내가 생각한 아이디어


😢 이걸 바보도 아니고 왜 틀렸지?...

처음에 보고 아싸리 뚜두두두 코드를 짜서 냈다. 테스트 케이스는 다 돌아가는데 채점을 해보니까 몇 가지 히든케이스에서 장렬히 실패해서 틀렸다.

ㄴ 자기야... 우리 좋았자나... 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;
}
profile
백문이불여일타

0개의 댓글

관련 채용 정보