일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 1620
- 이분탐색
- javascript
- Git Convention
- 5525
- 없는 숫자 더하기
- 브루트포스 알고리즘
- 위클리 챌린지
- 10162
- 구간 합 구하기 4
- 옵셔널 체이닝 연산자
- 4796
- 주식 가격
- n^2 배열 자르기
- 18111
- 2018 KAKAO BLIND RECRUITMENT
- 다이내믹 프로그래밍
- colorSyntax
- codeSyntaxHighlight
- js
- 숫자 문자열과 영단어
- 정수 삼각형
- mermaid js
- 깊이 우선 탐색
- BOJ
- react
- 소수 체크
- C++
- Hasing
- 프로그래머스
Archives
- Today
- Total
개발하는 kim-hasa
[c++][프로그래머스] 시저 암호 본문
https://programmers.co.kr/learn/courses/30/lessons/12926
코딩테스트 연습 - 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀
programmers.co.kr
공백을 제외하고 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꿉니다.
처음에는 그냥 s[i]에 n을 더해서 범위를 벗어나면 빼주었지만, 그렇게되니 char상에서 이상해져서
실패가 자꾸 떴었습니다.
그래서 아예 특정 값을 더한 후 26으로 나눠서 A와 a값에 더해주었습니다.
#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] >= 65 && s[i] <= 90) // 대문자인경우
{
s[i] = ((s[i] + n - 65) % 26) + 'A';
answer.push_back(s[i]);
}
else if(s[i] >= 97 && s[i] <= 122) // 소문자인 경우
{
s[i] = ((s[i] + n - 97) % 26) + 'a';
answer.push_back(s[i]);
}
else if(s[i] == ' ')
{
answer.push_back(s[i]);
}
}
return answer;
}
'Algorithm > Programmers(c++)' 카테고리의 다른 글
[c++][프로그래머스] 소수 찾기 (0) | 2021.08.10 |
---|---|
[c++][프로그래머스] 위클리 챌린지 2주차 (0) | 2021.08.09 |
[c++][프로그래머스] 행렬의 덧셈 (0) | 2021.08.06 |
[c++][프로그래머스] 직사각형 별찍기 (0) | 2021.08.06 |
[c++][프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2021.08.06 |