ねむーの日記~AtCoderな日々~

福岡に住むプログラミング好きのブログです!

AtCoder Beginner Contest 146 B - ROT N

最近コーラを飲むのにハマっています、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc146/tasks/abc146_b)にて開催されました、AtCoder Beginner Contest 146 B問題「B - ROT N」の問題と僕との戦闘記です。

0.はじめに

今回も、プログラミング言語C#を使用しています。

1.問題文

英大文字のみからなる文字列 S があります。また、整数 N が与えられます。

S の各文字を、アルファベット順で N 個後の文字に置き換えた文字列を出力してください。

ただしアルファベット順で Z の 1 個後の文字は A とみなします。

2.制約

  • 0 ≤ N ≤ 26
  • 1 ≤ | S | ≤ 104
  • S は英大文字のみからなる

3.入力例

  • 入力
13
ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 出力
NOPQRSTUVWXYZABCDEFGHIJKLM

4.初見の感想

  • 文字の変換はchar型が便利そう(+1などで文字変換できるので)

5.学びポイント

  • Zを超えた時はAに戻さなければならない
  • if文でZを超えた時を判定してもいいが… 増加分を26で割った余りを考えるのもアリ

    6.コードと簡単な解説

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int N = int.Parse(Console.ReadLine());
        char[] input = Console.ReadLine().ToCharArray();
        string ans = "";
        for (int i = 0; i < input.Length; i++)
        {
            char temp = (char)('A' +(input[i] + N-'A')%26);
            ans += temp;
        }
        Console.WriteLine(ans);
    }
}

7.最後に

LINQなどを用いるともっと簡単に書けそうです…