Problem:
三目並べ

3 × 3 の盤面の三目並べを考えましょう。三目並べは 2 人で行う対戦ゲームです。先攻後攻を決め、一人は黒石、一人は白石を打ちます。盤面に石を交互に一つずつ置いていき、縦横斜めのいずれかの方向に先に 3 つ自分の石を並べた人が勝ちとなります。

盤面の情報を入力とし、勝敗の判定を行い、黒が勝ちの場合は「b」、白が勝ちの場合は「w」、どちらもそろっていない場合は「NA」と出力するプログラムを作成してください。 盤面の情報は、3行3列の文字列で構成されます。「b」は黒石、「w」は白石、「+」(半角プラ
ス)は何も置かれていない状況を表します。ただし、同時に黒が3つ、白が3つ並ぶことはありませ
ん。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

board1
board2
board3

i 行目に盤面の i 行目の情報を表す文字列 boardi が与えられます。

データセットの数は 50 を超えません。

Output

データセット毎に、「b」、「w」、「NA」のいずれかを１行に出力します。

Sample Input

bbw
wbw
+b+
bwb
wbw
wbw
0

Output for the Sample Input

b
NA

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		new Main().run();
	}
	public void run(){
        Scanner scan = new Scanner(System.in);
        int[][] dx = {{0,1,2},{0,3,6},{0,4,8},{1,4,7},{3,4,5},{6,7,8},{2,4,6},{2,5,8}};
        int fl = 0;
        int t = 0;
        while(scan.hasNext()){
            String str = scan.nextLine();
            if(str.equals("0")){
            	break;
            }
            str += scan.nextLine() + scan.nextLine();
            fl = 0;
            for(int i = 0;i < 8;i++){
                t = 0;
                for(int j = 0;j < 3;j++){
                	switch(str.charAt(dx[i][j])){
                	case 'w':
                		t += 1;
                		break;
                	case 'b':
                		t += 9;
                		break;
                		default:
                			break;
                	}
                }
                if(t == 3){
                    fl = 1;
                    break;
                }else if(t == 27){
                    fl = 2;
                    break;
                }
            }
            System.out.println((fl == 0)?"NA":(fl == 1)?"w":"b");
        }
    }
}