TopCoderな記事

本日も休暇なので、ずっと問題を解いています。
現在SRM175 Div2 easy。

計算がなかなか合わず、苦戦したがなんとか突破。

public class ClockWalk{
    public int finalPosition(String flips){
        int pos = 12;
        for(int i = 0 ; i < flips.length() ; i++){
            if(flips.charAt(i) == 'h'){
                if(pos + (i + 1) % 12 > 12){
                    pos = (pos + (i + 1)) % 12;
                    if(pos == 0){
                        pos = 12;
                    }
                }else{
                    pos = pos + (i + 1) % 12;
                }
            }else{
                if(pos - (i + 1) % 12 <= 0){
                    pos = pos - (i + 1) % 12 + 12;
                }else{
                    pos = pos - (i + 1) % 12;
                }
            }
        }
        return pos;
    }
}

しかし、突破直後にもっと簡単な方法を思いつく。
いちいち条件で判定せずとも、最初に全部合計してから計算しても、
結果が保たれるのではないか!?

ということで、早速書き直す。3分もかからないうちに終わり、
なぜこんな問題で40分も悩んだんだろうと悔やまれた。

public class ClockWalk{
    public int finalPosition(String flips){
        int pos = 0;
        for(int i = 0 ; i < flips.length() ; i++){
            if(flips.charAt(i) == 'h'){
                pos += (i+1);
            }else{
                pos -= (i+1);
            }
        }
        if(pos % 12 == 0){
            return 12;
        }else if ( pos < 0 ){
            return pos % 12 + 12;
        }else{
            return pos % 12;
        }
    }
}

毎回判定せずとも、全て合計してからでも結果が変わらない問題って
思ったよりある気がする。これぐらいは気づこう私!

div2 easyはSRM178まで終了。178は意味がわからなくて苦戦した。
明日参戦するよ!

  by ddrer-yossi | 2011-04-07 16:33 | TopCoder

<< TopCoder SRM502 ゲーセン日和 >>

SEM SKIN - DESIGN by SEM EXE