[알고리즘 문제 풀기] Virus(13775)

C#
lhs's avatar
May 08, 2025
[알고리즘 문제 풀기] Virus(13775)
notion image

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

LHS's Study Space