プログラミングは芸術だ!

web系エンジニアの備忘録 「プログラミングは芸術」を座右の銘として日々勉強中 最近Androidもやってます

AOJ2582 Step Aerobics【競技プログラミング】

AOJ2582 Step Aerobics

Step Aerobics | Aizu Online Judge

踏み台昇降で動かした足の情報が与えられるので,正しく昇降を行った回数を求める問題

仮定
踏み台昇降の定義は問題文を参照
床についている足をさらに下げるような動作や,踏み台についている足をさらに上げるような動作は入力されない

解法
正しくシミュレートする
片足だけの上げ下げをカウントしないように気をつける

import java.util.Scanner;

public class AOJ2582 {
    void run() {
        Scanner sc = new Scanner(System.in);
        while(true){
            int n = sc.nextInt();
            if(n == 0) break;
      //現在の脚の状況legState[0]が左脚,[1]が右足、値が0が床、1が踏み台
            int legState[] = new int[2];
      //前回両足床(0)でカウントしたのか、両足踏み台(1)でカウントしたのか覚えておく
            int prevSate = 0;
            int stepCount = 0;
            for (int i = 0; i < n; i++) {
                String moveLeg = sc.next();
                if(moveLeg.equals("lu")){
                    legState[0] = 1;
                }
                else if (moveLeg.equals("ru")) {
                    legState[1] = 1;
                }
                else if (moveLeg.equals("ld")) {
                    legState[0] = 0;
                }
                else if (moveLeg.equals("rd")) {
                    legState[1] = 0;
                }
                
                if(legState[0] == 0 && legState[1] == 0 && prevSate == 1){
                    stepCount++;
                    prevSate = 0;
                }
                else if(legState[0] == 1 && legState[1] == 1 && prevSate == 0){
                    stepCount++;
                    prevSate = 1;
                }
            }
            System.out.println(stepCount);
        }
    }
    public static void main(String[] args) {
        new AOJ2582().run();
        // new Main().run();
    }
}

最初はswitch文で処理していたのだが、AOJのjavaバージョンが古くて、switch文にstringが使えなかったので、ifelseで実装

この手のシミュレーション問題は楽しい!