[백준 10347] Reverse Rot (C#, C++) - soo:bak
작성일 :
문제 링크
설명
문자 집합은 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;
}