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