본문 바로가기
알고리즘

알고리즘 스터디 11

by COCO1337 2020. 7. 3.

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가

programmers.co.kr

문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.

입출력 예

s n result
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"

 

C++를 사용한 제 풀이입니다.

#include <string>
#include <vector>

using namespace std;

unsigned char c;

string solution(string s, int n) {
	for (int i = 0; i < s.size(); ++i) {
		if (s[i] == ' ')
			continue;

		c = s[i] + n;
		if ((s[i] < 'a' && c > 'Z') || c > 'z') {
			s[i] = c - 26;
		}
		else {
			s[i] = c;
		}
	}

	return s;
}

기본적으로 s 크기만큼 돌면서 공백은 넘어가고 대문자일때와 소문자일때를 구분하고 문제를 해결했어요

다만 char를 썼을 때는 계속 오버플로우가 나서 몇가지 테스트 케이스를 실패했었는데

unsigned char로 바꾸니까 성공!

반응형

'알고리즘' 카테고리의 다른 글

알고리즘 스터디 13  (0) 2020.07.06
알고리즘 스터디 12  (0) 2020.07.05
알고리즘 스터디 10  (0) 2020.07.02
알고리즘 스터디 9  (0) 2020.07.01
알고리즘 스터디 8  (0) 2020.06.30

댓글