[프로그래머스/C++] 시저 암호

꿈별·2024년 2월 2일
0

문제풀이

목록 보기
42/52
post-thumbnail

문제


풀이

  • ASCII 코드
    영어 대문자 : 65~90, 소문자 : 97~122

오답

테스트 케이스 일부 실패가 뜬다.

#include <string>
#include <vector>

using namespace std;

string solution(string s, int n) {
    string answer = "";
    for (int i = 0; i < s.size(); i++)
    {
        if (' ' == s[i])
        {
            answer += ' ';
            continue;
        }
        if (90 < s[i] + n && s[i] + n < 97)
        {
            answer += (64 + (s[i] + n - 90));
            continue;
        }
        if (122 < s[i] + n)
        {
            answer += (96 + (s[i] + n - 122));
            continue;
        }
        answer += (s[i] + n);
    }
    return answer;
}

  • 내 실수
    만약 s의 문자가 72(H) 이상이고 n이 25일 경우,
    72+25 = 97이므로 대문자 H가 a가 되어버린다!

-> zy GH가 나와야 함


정답

조건문을 수정했다.

// 대문자
if (90 < s[i] + n && s[i] + n < 97)
...
//소문자
if (122 < s[i] + n)

// 대문자
if (90 >= s[i] && 90 < s[i] + n)
...
//소문자
if (96 < s[i] && 122 < s[i] + n)

#include <string>
#include <vector>

using namespace std;

string solution(string s, int n) {
    string answer = "";
    for (int i = 0; i < s.size(); i++)
    {
        if (' ' == s[i])
        {
            answer += ' ';
            continue;
        }
        // 대문자
        if (90 >= s[i] && 90 < s[i] + n)
        {
            answer += (64 + (s[i] + n - 90));
            continue;
        }
        //소문자
        if (96 < s[i] && 122 < s[i] + n)
        {
            answer += (96 + (s[i] + n - 122));
            continue;
        }
        answer += (s[i] + n);
    }
    return answer;
}

0개의 댓글