문제 풀기/C#

45. 시저 암호

kagan-draca 2025. 1. 24. 15:07

기본 틀 )

public class Solution {
    public string solution(string s, int n) {
        string answer = "";
        return answer;
    }
}

 

위 문제는 아스키코드에 대한 이해가 있어야 문제를 풀 수 있다.

 

물론 아스키코드 'a'가 97, 'z'가 122 'A'가 65, 'Z'가 90이다.

 

라는 내용을 다 외울 필요은 없다.

 

이유, C#에서는 문자(char) 형을 정수(int) 형으로

바꾸면 자동으로 "아스키코드"의 값을 출력해준다.

 

이점을 활용해 문자열을 문자 배열로 만들고 순회하면서

 

공백은 continue로 다음 반복 시행으로 넘어가고

 

공백이 아닐 경우 IsUpper과 IsLower 함수를 이용해 대소문자를 구분 후

 

해당 문자를 아스키코드로 변경한 값 + n 값이

 

'z'나 'Z'보다 클 경우

 

해당 문자를 아스키코드로 변경한 값 -26 + n 한 값으로 변경해주고,

 

아닐 경우

 

해당 문자를 아스키코드로 변경한 값 + n 한 값으로 변경해주면 된다.

 

using System;

public class Solution {
    public string solution(string s, int n) 
    {
        string answer = "";
        
        char[] charArray = s.ToCharArray();
        
        for(int i = 0; i < charArray.Length; i++)
        {
            if(charArray[i] == ' ') continue;
            else if(char.IsLower(charArray[i]))
            {
                charArray[i] = (int)charArray[i] + n > (int)'z' ? (char)(charArray[i] - 26 + n) : (char)(charArray[i] + n);
            }
            else
            {
                charArray[i] = (int)charArray[i] + n > (int)'Z' ? (char)(charArray[i] - 26 + n) : (char)(charArray[i] + n);
            }
        }
        
        return new string(charArray);
    }
}