山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

Aizu Online Judge Introduction to Programming I の感想

Aize Online Judge

競技プログラミングのサイトとして有名なAizu Online Judgeをまたやり始めました。

螺旋本に掲載されている問題はこのサイトのものを利用しているので、すでに解いた問題もあります。

Introduction to Programming I

ITP1は競技プログラミングの導入のための問題のセットです。yukicoderのレベル1~1.5またはAtCoderのABCのA, Bに該当する難易度だと思います。

http://judge.u-aizu.ac.jp/onlinejudge/finder.jsp?course=ITP1

ITP1-11

ITP1の最後のセットであるITP1-11は結構難しいと思いました。サイコロの展開図や、サイコロの目の状態に関する問題で解きにくかったです。

内容的には、次のサイトと関連する部分があります。

cakes.mu

Structure and Class - Dice I

サイコロを転がしたときの一番上の面の数を答える問題です。

コード
import java.util.Scanner;

public class ProblemA {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[]d = new int[6];
        for(int i = 0; i < 6; i++) {
            d[i] = scan.nextInt();
        }
        String s = scan.next();
        scan.close();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int []t = new int[6];
            for(int j = 0; j < 6; j++) {
                t[j] = d[j];
            }
            if(c == 'E') {
                d[0] = t[3];
                d[5] = t[2];
                d[2] = t[0];
                d[3] = t[5];
            }else if(c == 'W') {
                d[0] = t[2];
                d[2] = t[5];
                d[5] = t[3];
                d[3] = t[0];
            }else if(c == 'N') {
                d[0] = t[1];
                d[4] = t[0];
                d[5] = t[4];
                d[1] = t[5];
            }else {
                d[0] = t[4];
                d[4] = t[5];
                d[5] = t[1];
                d[1] = t[0];
            }
        }
        System.out.println(d[0]);
    }
}

感想

一応全部解くことができましたが、ITP1-11の解き方はまずいような気がします。

まあ、似たような問題が出たらもう少し考えて解こうと思います。

最近、UnityやPythonの勉強ができていませんが、9月いっぱいは競技プログラミングをやろうと思います。10月からはUnityとかJavaの勉強もやっていきます。