このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ウサギたちはしばしばさびしさを感じるので、あるグループがまとまり、どれが一番美しい耳かを競うビューティーコンテストを開催した。1匹が1票を持つ。もし自身に投票した場合は無効となる。もっとも票数が多かったのが勝者となる。namesがウサギの名前、votesが投票先、それぞれのi番目の要素について取り出すと、ウサギnames[i]がvotes[i]に投票したということを意味する。勝者を文字列で返せ。もし複数の勝者がいるのであれば、空文字を返せ。
私の解答はこちら。
import java.util.HashMap; public class RabbitVoting { public String getWinner(String[] names, String[] votes) { HashMap<String, Integer> hm = new HashMap<String, Integer>(); for( int i=0 ; i<names.length ; i++ ){ if( names[i].equals(votes[i]) ) continue; // 自分に投票したら票として扱わない if( hm.containsKey(votes[i]) ){ // 票としてカウント hm.put(votes[i], hm.get(votes[i])+1 ); }else{ hm.put(votes[i], 1); } } int maxvotes = -1; String winner = ""; for( String key: hm.keySet() ){ // こういうループもある if( maxvotes < hm.get(key) ){ // 最多得票数を更新した場合 winner = key; maxvotes = hm.get(key); }else if( maxvotes == hm.get(key) ){ // 最多得票数が複数でた場合 winner = ""; } } return winner; } }
得点は189.29/250、2回目のsubmitでシステムテストクリア。最初にputするときに0で初期化して間違えるというオチ(1で初期化する必要がある)。
0 件のコメント:
コメントを投稿