반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [SW expert Academy] SWEA 11315번 오목 판정 자바(Java)

1) 난이도 : D3

 

2) 문제번호 : 11315번

 

3) 문제 출처

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

2. 문제

N X N 크기의 판이 있다. 판의 각 칸에는 돌이 있거나 없을 수 있다. 돌이 가로, 세로, 대각선 중 하나의 방향으로 다섯 개 이상 연속한 부분이 있는지 없는지 판정하는 프로그램을 작성하라.

 

3. 제약사항

 

4. 입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N(5 ≤ N ≤ 20)이 주어진다.

다음 N개의 줄의 각 줄에는 길이 N인 문자열이 주어진다. 각 문자는 ‘o’또는 ‘.’으로, ‘o’는 돌이 있는 칸을 의미하고, ‘.’는 돌이 없는 칸을 의미한다.

 

5. 출력

각 테스트 케이스 마다 돌이 다섯 개 이상 연속한 부분이 있으면 “YES”를, 아니면 “NO”를 출력한다.

 

6. 풀이

7. 소스 코드

import java.util.*;

public class Main3 {
	static int N; // 바둑판 크기
	static char[][] map; // 바둑판
	static int[] dr = {-1, -1, 0, 1, 1, 1, 0, -1};
	static int[] dc = {0, 1, 1, 1, 0, -1, -1, -1};
	static boolean sign;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt(); //테스트케이스 개수
		
		for(int tc=1;tc<=T;tc++) {
			N = sc.nextInt(); //바둑판 크기 입력
			
			map = new char[N][N]; //바둑판 크기 선언
			
			//바둑판 입력
			for(int i=0;i<N;i++) {
				String input = sc.next();
				for(int j=0;j<N;j++) {
					map[i][j] = input.charAt(j);
				}
			}
			sign = false;
			for(int i=0;i<N;i++) {
				for(int j=0;j<N;j++) {
					if(map[i][j]=='o') {
						for(int a=0;a<8;a++) {
							for(int count=1;count<5;count++) {
								int nr = i + dr[a] * count;
								int nc = j + dc[a] * count;
								
								if(nr<0 || nc<0 || nr>=N || nc>=N) break;
								else if(map[nr][nc]!='o') break;
								if(count==4) sign = true;
							}
						}
					}
				}
			}
			if(sign) System.out.printf("#%d YES\n", tc);
			else System.out.printf("#%d NO\n", tc);
		}
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기