
1. 문제 풀이 아이디어
- 문자열의 각 문자를 입력 숫자만큼 왼쪽으로 시저 암호 방식으로 이동하되, 문자가 영문 소문자인 경우에만 적용하고, 이동 값은 매번 1~25 사이로 순환해 문제를 해결할 수 있다.
2. 나의 정답 코드
using System.Text;
StringBuilder sb = new StringBuilder("");
using (StreamReader sr = new StreamReader(Console.OpenStandardInput()))
using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()))
{
int n = int.Parse(sr.ReadLine());
string line = sr.ReadLine();
for (int i = 0; i < line.Length; i++)
{
char c = line[i];
if (c < 'a' || 'z' < c)
{
sb.Append(c);
continue;
}
int nc = (c - n - 'a' + 26) % 26;
n = n % 25 + 1;
sb.Append((char)('a' + nc));
}
sw.WriteLine(sb);
}
3. 정리
- for문으로 각 문자를 순회한다.
- 문자가 소문자 범위('a'~'z')가 아니면 그대로 추가한다.
- 소문자인 경우,
(c - n - 'a' + 26) % 26
으로 왼쪽으로 n만큼 이동한 문자를 구한다.
- 이동 후
n = n % 25 + 1;
로 다음 이동 값 n을 갱신한다.
- 문자를 StringBuilder에 누적하고, 마지막에 출력한다.
Share article