C# 알고리즘 - 시저 암호
작성자 정보
- 마스터 작성
- 작성일
본문
[문제 설명]
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
[제한사항]
공백은 아무리 밀어도 공백입니다.
s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
s의 길이는 8000이하입니다.
n은 1 이상, 25이하인 자연수입니다.
[입출력 예]
[코드]
using System;
public class Solution {
public string solution(string s, int n) {
string answer = "";
char[] str_arr = s.ToCharArray();
for(int i = 0; i < str_arr.Length; ++i)
{
if (str_arr[i] == ' ') continue;
int temp_num = Convert.ToInt32(str_arr[i]) + n;
if((str_arr[i] >= 'A' && str_arr[i] <= 'Z'))
{
if(temp_num > 'Z')
{
temp_num -= 26;
}
}
else
{
if(temp_num > 'z')
{
temp_num -= 26;
}
}
str_arr[i] = Convert.ToChar(temp_num);
}
answer = new string(str_arr);
return answer;
}
}
[풀이]
1. 매개변수 s를 char[]에 넣기
char[] str_arr = s.ToCharArray();
2.for문 돌리기
for(int i = 0; i < str_arr.Length; ++i)
3.str_arr[i] 값이 공백이면 계속 돌기
if (str_arr[i] == ' ') continue;
4.매개변수 n만큼 밀어야 하기 때문에 int로 현재 값에 n만큼 더하기
int temp_num = Convert.ToInt32(str_arr[i]) + n;
5.대소문자 구별하기
if((str_arr[i] >= 'A' && str_arr[i] <= 'Z'))
if(temp_num > 'Z') temp_num -= 26;
else
if(temp_num > 'z') temp_num -= 26;
-26을 하는 이유는 알파뱃 갯수가 26이기 때문
6.int를 다시 char[]에 넣어야 해서 char로 캐스팅하기
str_arr[i] = Convert.ToChar(temp_num);
7.char[]를 문자열로 바꾸기
answer = new string(str_arr);
[주소]
https://school.programmers.co.kr/learn/courses/30/lessons/12926
해당 알고리즘 문제는 프로그래머스의 알고리즘 문제입니다
관련자료
-
이전
-
다음