728x90
● [문제번호 11655] ROT13
https://www.acmicpc.net/problem/11655
● 알아야 할 것
: 문자와 문자 계산 (ASCII 코드 참고)
● 풀이 과정
: 대문자와 소문자를 구분하여 구현하면 된다.
: 제대로 구현되었는 지 의문이면 문제 설명에도 쓰여있다시피 output을 input으로 실행하면 얼만큼 차이나는 지 좀 더 쉽게 알아 낼 수 있다.
● 주의 할 것
: 문자와 문자 계산 시 오차 수정
예를 들어 'Z' 에서 3칸 뒤의 문자는 'C' 이다
'Z' + 3 을 하면 ASCII 코드 상 다른 문자가 출력되므로 다시 'A'로 옮겨야 한다.
하지만 'Z' + 3 - 'A' 를 하면 'D' 가 출력된다.
이를 수정하기 위해 'Z' 를 넘어가는 경우에만 계산 결과에 1칸 앞으로 옮기면 된다.
따라서 'Z' 의 3칸 뒤는 'Z' + 3 - 'A' - 1 로 표현하면 된다.
: 이러한 오차가 왜 생기는 지 궁금하면
ASCII 코드를 보고 문자를 숫자로 바꾼다음 계산하면 완전히 이해 할 수 있다.
● 참고 할 것
: ASCII 코드 https://ko.wikipedia.org/wiki/ASCII
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
string str;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 공백 있는 문자열 입력
getline(cin, str);
for(int s = 0; s < str.length(); s++)
{
// 대문자인 경우
if('A' <= str[s] && str[s] <= 'Z')
{
// 암호화 후 'Z'를 넘어가는 경우
if(str[s] + 13 > 'Z')
// 'Z'를 빼고 'A'를 더하는 과정에 오류 수정을 위한 -1
str[s] = str[s] + 13 - 'Z' + 'A' - 1;
else
str[s] = str[s] + 13;
}
// 소문자인 경우
if('a' <= str[s] && str[s] <= 'z')
{
// 암호화 후 'z'를 넘어가는 경우
if(str[s] + 13 > 'z')
// 'z'를 빼고 'a'를 더하는 과정에 오류 수정을 위한 -1
str[s] = str[s] + 13 - 'z' + 'a' - 1;
else
str[s] = str[s] + 13;
}
}
// 문자열 출력
cout << str;
return 0;
}
● [백준] - [알고리즘 기초 1/2] - [203 - 자료구조 1 (참고)] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 1935 | 후위 표기식2 | https://pirateturtle.tistory.com/170 |
2 | 1918 | 후위 표기식 | https://pirateturtle.tistory.com/171 |
3 | 10808 | 알파벳 개수 | https://pirateturtle.tistory.com/172 |
4 | 10809 | 알파벳 찾기 | https://pirateturtle.tistory.com/173 |
5 | 10820 | 문자열 분석 | https://pirateturtle.tistory.com/174 |
6 | 2743 | 단어 길이 재기 | https://pirateturtle.tistory.com/175 |
7 | 11655 | ROT13 | https://pirateturtle.tistory.com/176 |
8 | 10824 | 네 수 | https://pirateturtle.tistory.com/177 |
9 | 11656 | 접미사 배열 | https://pirateturtle.tistory.com/178 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글
[BOJ/백준] 10430 나머지 (0) | 2021.07.28 |
---|---|
[BOJ/백준] 11656 접미사 배열 (0) | 2021.07.27 |
[BOJ/백준] 10824 네 수 (0) | 2021.07.27 |
[BOJ/백준] 2743 단어 길이 재기 (0) | 2021.07.27 |
[BOJ/백준] 10820 문자열 분석 (0) | 2021.07.27 |
[BOJ/백준] 10809 알파벳 찾기 (0) | 2021.07.27 |
[BOJ/백준] 10808 알파벳 개수 (0) | 2021.07.27 |
댓글