파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분

빨간색 : 해결방법

초록색 : 느낀 점

문제

k값만큼 알파벳 순서인 뒤로 이동.

 

1. 대소문자 구별

2. 알파벳 외에 다른 문자는 변경하지 않는다.

3.'z' , 'Z'를 넘어가면 다시 'a', 'A' 순서로

풀이 : 내가 작성한 코드

            public static string caesarCipher(string s, int k)
            {
                string strAnswer = string.Empty;
                for (int i = 0; i < s.Length; i++)
                {
                    if (s[i] >= 'a' && s[i] <= 'z' )
                    {
                        int a = s[i] - (97 - k);
                        strAnswer += ((char)((a % 26) + 97));
    
                    }
                    else if(s[i] >= 'A' && s[i] <= 'Z')
                    {
                        int a = s[i] - (65 - k);
                        strAnswer += ((char)((a % 26) + 65));
                    }
                    else
                    {
                        strAnswer += s[i];
                    }
                }
                return strAnswer;
            }

고려할 부분은 대소문자 체크와 그 외 문자 체크 정도였다.  z이면 다시 a로 이동하도록 하는 부분을 어떻게 할지는 고민했었다. 알파벳 개수인 26을 % 연산을 통해서 체크했다.  

 

Caesar Cipher | HackerRank

Encrypt a string by rotating the alphabets by a fixed value in the string.

www.hackerrank.com

알고리즘 문제는 풀면 풀수록 자주 등장하거나 디테일한 값을 구하는 패턴이 있는 거 같다. 많이 풀어봐야겠다. 

반응형

+ Recent posts