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.*;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		while(true){
			String[] s = new String[3];
			s[0] = sc.next();
			if(s[0].compareTo("0")==0)break;
			s[1] = sc.next();
			s[2] = sc.next();
			int[][] map = new int[3][3];
			
			for(int i=0;i<3;i++){
				for(int j=0;j<3;j++){
					String t = s[i].substring(j,j+1);
					if(t.compareTo("b")==0){
						map[i][j] = 1;
					}else if(t.compareTo("w")==0){
						map[i][j] = 2;
					}
				}
			}
			
			int count;
			int ans = 0;
			for(int k=1;k<3;k++){
				for(int i=0;i<3;i++){
					count = 0;
					for(int j=0;j<3;j++){
						if(map[i][j]==k)count++;
					}
					if(count==3){
						ans=k;
						break;
					}
				}
				for(int i=0;i<3;i++){
					count = 0;
					for(int j=0;j<3;j++){
						if(map[j][i]==k)count++;
					}
					if(count==3){
						ans=k;
						break;
					}
				}
				
				if(map[1][1]==k){
					if((map[0][2]==k && map[2][0]==k) || (map[0][0]==k && map[2][2]==k))ans=k;
				}
	
			}
			
			if(ans==1){
				System.out.println("b");
			}else if(ans==2){
				System.out.println("w");
			}else{
				System.out.println("NA");
			}
			
		}
	}	
}