-
[프로그래머스] Level 1 - 시저 암호코딩 테스트 2022. 9. 5. 12:30
1. 문제 설명
알파벳 소문자, 대문자, 혹은 공백으로 이루어진 문자열 s를 받아, 인자로 주어진 n의 거리만큼 밀어낸 새로운 문자열을 리턴하는 함수를 만드는 문제 (단, 공백은 밀어도 공백임)
ex) "Aa" 문자열을 3만큼 밀어서 -> "Dd"를 리턴
ex) "a b c" 문자열을 1만큼 밀어서 -> "b c d"를 리턴2. 풀이
#include <string> #include <vector> using namespace std; string solution(string s, int n) { string answer = ""; n = n % 26; int Len = s.length(); for (int i = 0; i < Len; ++i) { int ch = s[i] + n; if (s[i] == ' ') { ch = ' '; } else if (s[i] >= 'A' && s[i] <= 'Z') { if (ch > 'Z') { ch = 'A' + (ch % 'Z' - 1); } } else if (s[i] >= 'a' && s[i] <= 'z') { if (ch > 'z') { ch = 'a' + (ch % 'z' - 1); } } answer += ch; } return answer; }
3. 해설
문자는 아스키 코드로 표현되므로, + 연산으로 n만큼 밀어낸 알파벳을 구할 수 있다.
단, 고려해야 할 조건 두 가지가 있다.
- 기존 문자가 'A' - 'Z' 범위에 있고, n만큼 더했을 때 'Z' 이상의 값이 나오는 경우
- 기존 문자가 'a' - 'z' 범위에 있고, n만큼 더했을 때 'z' 이상의 값이 나오는 경우
두 가지 경우에 해당될 경우에는 다시 해당 대문자 혹은 소문자의 맨 앞 글자로 다시 돌아가야 한다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] Level1 - 완주하지 못한 선수 (0) 2022.09.20 [프로그래머스] Level1 - 다트 게임 (0) 2022.09.15 [프로그래머스] Level1 - 문자열 내 마음대로 정렬하기 (0) 2022.09.11 [프로그래머스] Level 1 - 소수 찾기 (0) 2022.09.06 [프로그래머스] Level 1 - 약수의 합 (0) 2022.09.02