susunshunのお粗末な記録

お粗末に丁寧に生きる

0500:Card Game

開発環境について

最初はコーディング力鍛えるためにSublime text 3でやってたけどNetbeansに戻しました。

何でNetBeansかと言うとマスコットキャラが可愛いからです。

これがマスコットキャラのねこび〜ん。かわいい。。。

f:id:susunshun:20141231230612g:plain

eclipseAptana等も使ったけど正直違いがわかる程のスキルレベルには至ってません。コードかけて実行/デバッグできりゃ何でもよかです。

今日は日本情報オリンピックの過去問に着手。
他にも3問解いたけど面倒臭いので割愛。

問題

A と B の 2 人のプレーヤーが, 0 から 9 までの数字が書かれたカードを使ってゲームを行う.最初に, 2 人は与えられた n 枚ずつのカードを,裏向きにして横一列に並べる.その後, 2 人は各自の左から 1 枚ずつカードを表向きにしていき,書かれた数字が大きい方のカードの持ち主が,その 2 枚のカードを取る.このとき,その 2 枚のカードに書かれた数字の合計が,カードを取ったプレーヤーの得点となるものとする.ただし,開いた 2 枚のカードに同じ数字が書かれているときには,引き分けとし,各プレーヤーが自分のカードを 1 枚ずつ取るものとする.

回答

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main{
    public static void main(String[] a)throws IOException{
    	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        String str = null;
        int gameNum;
        int scoreA = 0;
        int scoreB = 0;
        int numA;
        int numB;                
        
    	while((str = in.readLine()) != null){
            if(str.equals("0")){
                System.exit(0);
            }else{
                gameNum = Integer.parseInt(str);

                for(int i=0;i<gameNum;i++){
                    str = in.readLine();
                    numA = Integer.parseInt(str.split(" ")[0]);
                    numB = Integer.parseInt(str.split(" ")[1]);
                    
                    if(numA > numB){
                        scoreA += (numA + numB);
                    }else if(numA < numB){
                        scoreB += (numA + numB);                    
                    }else{
                        scoreA += numA;
                        scoreB += numB;
                    }
                }                    
                
                System.out.println(scoreA+" "+scoreB);
                scoreA = 0;
                scoreB = 0;
            }
        }
    }
}

特に詰まる所は無かったけど処理速度が遅いので、

  • gameNumの引き回し方
  • strの分割方法

あたりが改善ポイントでしょうか。