작성일 :

문제 링크

10347번 - Reverse Rot

설명

문자 집합은 A부터 Z까지의 알파벳과 밑줄, 마침표를 포함한 총 28개입니다.

입력 한 줄마다 회전량 N과 문자열이 주어집니다. 문자열을 뒤집은 뒤, 집합에서 N칸 앞으로 회전시켜 변환합니다. 0이 입력되면 종료합니다.


접근법

먼저, 문자 집합 문자열을 상수로 두고 각 문자의 인덱스를 활용합니다.

다음으로, 입력 문자열을 뒤집고 각 문자의 인덱스를 찾습니다. 해당 인덱스에 N을 더한 뒤 28로 나눈 나머지 위치의 문자로 치환합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Text;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_.";
      while (true) {
        var line = Console.ReadLine();
        if (line == null)
          break;
        var parts = line.Split(' ');
        var n = int.Parse(parts[0]);
        if (n == 0)
          break;
        var s = parts[1];

        var sb = new StringBuilder();
        for (var i = s.Length - 1; i >= 0; i--) {
          var idx = alphabet.IndexOf(s[i]);
          sb.Append(alphabet[(idx + n) % 28]);
        }
        Console.WriteLine(sb.ToString());
      }
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_.";

  int n;
  while (cin >> n && n != 0) {
    string s; cin >> s;
    reverse(s.begin(), s.end());

    for (char ch : s) {
      int idx = alphabet.find(ch);
      cout << alphabet[(idx + n) % 28];
    }
    cout << "\n";
  }

  return 0;
}