AOJ2582 Step Aerobics
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2582
踏み台昇降で動かした足の情報が与えられるので,正しく昇降を行った回数を求める問題
仮定
踏み台昇降の定義は問題文を参照
床についている足をさらに下げるような動作や,踏み台についている足をさらに上げるような動作は入力されない
解法
正しくシミュレートする
片足だけの上げ下げをカウントしないように気をつける
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で実装
この手のシミュレーション問題は楽しい!