[#20][알고리즘] 시저 암호(Caesar cipher)
프로그래머스 > 시저 암호(Caesar cipher)
문제 링크(https://programmers.co.kr/learn/challenge_codes/144)C++풀이
| 
#include<iostream> 
#include<string> 
using namespace std; 
string caesar(string s, int n) 
{ 
  while(n>26){ 
    n -= 26; 
  } 
  int size = s.length(); 
  char c[size]; 
  string answer = ""; 
  for(int i = 0 ; i < s.length(); i++){ 
    //각 자리 n만큼 밀기  
    if(s.at(i)!=32){ 
      if(s.at(i) >= 97 && s.at(i)+n > 122){ 
        //소문자 처리 
        s.at(i) -= 26; 
        c[i]= s.at(i)+n; 
      } else if(s.at(i)+n > 90 && s.at(i) > 64 && s.at(i) <= 90){ 
        //대문자 처리 
        s.at(i) -= 26; 
        c[i]= s.at(i)+n; 
      } else{ 
          c[i] = s.at(i) + n; 
      } 
    } else{ 
      //공백 처리 
      c[i] = 32; 
    } 
  } 
  answer = c; 
  return answer.substr(0,size); 
} 
int main() 
{ 
    string text = "aB Ba zZ"; 
    int testNo = 25; 
    string testAnswer = caesar(text, testNo); 
    cout<<testAnswer; 
} | cs | 
n이 4일 때, 30일 때 모두 같은 결과가 나오기 때문
2. 공백과 공백이 아닌 문자 구분
3. 공백일 경우 공백으로 유지
4. 공백이 아닐 경우 대문자/소문자 구분
5. 소문자의 경우 n만큼 밀었을 때 z(122)를 넘어가면
: 26만큼 뺀 후 n을 더한다
6. 대문자의 경우 n만큼 밀었을 때 Z(90)를 넘어가면
: 26만큼 뺀 후 n을 더한다.

댓글
댓글 쓰기