[SW1979] 어디에 단어가 들어갈 수 있을까
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/SW Expert Academy

[SW1979] 어디에 단어가 들어갈 수 있을까

SW Expert Academy- 어디에 단어가 들어갈 수 있을까

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq

SW Expert Academy

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

swexpertacademy.com

문제 입력

더보기
10
5 3
0 0 1 1 1
1 1 1 1 0
0 0 1 0 0
0 1 1 1 1
1 1 1 0 1
5 3
1 0 0 1 0
1 1 0 1 1
1 0 1 1 1
0 1 1 0 1
0 1 1 1 0 
8 3
1 1 0 1 0 1 1 1
0 1 0 1 0 0 0 1
1 1 1 0 0 1 0 1
0 1 0 1 0 1 1 1
0 0 0 1 0 1 0 1
1 1 1 1 1 1 0 0
0 1 0 0 0 1 0 1
1 1 1 0 1 1 1 1 
8 4
0 1 1 1 0 1 1 1
1 0 0 1 0 1 0 0
1 0 0 1 1 1 0 1
1 1 1 0 0 1 1 1
0 0 1 0 0 1 0 1
1 1 1 1 1 0 0 0
0 1 0 0 1 0 0 0
1 1 1 0 1 1 1 0 
10 3
0 1 0 0 0 1 0 0 0 1
0 1 0 1 0 1 0 1 1 1
1 1 1 1 1 1 1 1 0 1
0 1 0 0 1 0 0 1 0 0
0 1 1 1 1 0 1 1 1 0
0 0 0 1 0 1 0 0 1 0
0 1 1 1 0 1 1 1 1 1
0 1 0 0 0 1 0 0 0 1
1 1 1 0 0 0 0 1 1 1
0 0 1 1 1 0 0 1 0 0 
10 4
0 0 1 0 0 0 1 0 0 1
0 0 1 1 0 0 1 1 1 1
1 1 1 1 1 1 1 1 0 1
0 0 1 0 1 0 0 1 0 0
0 1 1 1 1 1 0 1 1 1
0 0 0 1 0 0 1 0 1 0
0 1 1 1 0 1 1 1 0 1
0 0 1 0 0 0 1 0 0 1
1 1 1 0 0 0 0 1 1 1
0 1 0 1 1 0 1 1 1 0 
12 3
0 1 0 1 0 1 0 1 0 1 0 1
1 1 0 1 1 1 0 1 1 1 0 1
0 1 1 1 0 1 1 1 0 1 1 1
0 0 1 0 0 0 1 0 0 0 1 0
0 1 1 1 0 1 1 1 0 1 1 1
1 1 0 1 1 1 0 1 1 1 0 1
0 1 1 1 0 1 1 1 0 1 1 1
0 0 1 0 0 0 1 0 0 0 1 0
0 1 1 1 0 1 1 1 0 1 1 1
1 1 0 1 1 1 0 1 1 1 0 1
0 1 1 1 0 1 1 1 0 1 1 1
0 0 1 0 0 0 1 0 0 0 1 0 
12 4
0 1 1 1 0 1 1 1 0 1 1 1
1 1 0 1 1 1 0 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0
0 1 1 1 0 1 1 1 0 1 1 1
1 1 0 1 1 1 0 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0
0 1 1 1 0 1 1 1 0 1 1 1
1 1 0 1 1 1 0 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0 
15 3
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
15 2
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1
#1 2
#2 6
#3 6
#4 0
#5 14
#6 2
#7 45
#8 0
#9 98
#10 7

문제 풀이

package sw.expert.academy;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class SW1979어디에단어가들어갈수있을까 {

	// 한 라인당 단어가 들어갈 수 있는 구간의 갯수를 리턴하는 함수
	// vh: vertical or horizontal
	static int check(int vh, int n, int k, int[][] arr) {
		int tcnt = 0; // total cnt

		for (int i = 0; i < n; i++) {
			int cnt = 0; // 연속하는 0의 개수

			for (int j = 0; j < n; j++) {
				if (vh == 0) { // horizontal
					if (arr[i][j] == 1) cnt++;
					else {
						if (cnt == k) tcnt++;
						cnt = 0;
					}
				} else { // vertical
					if (arr[j][i] == 1) cnt++;
					else {
						if (cnt == k) tcnt++;
						cnt = 0;
					}
				}
			}
			if (cnt == k) tcnt++;
		}

		return tcnt;
	}


	// 메인 함수
	public static void main(String[] args) throws FileNotFoundException {
		System.setIn(new FileInputStream("src/sw/expert/academy/input.txt"));
		Scanner sc = new Scanner(System.in);

		// T 입력받기
		int T = sc.nextInt();

		// 테스트 케이스 돌기
		for (int t = 0; t < T; t++) {
			int n, k;
			n = sc.nextInt();
			k = sc.nextInt();

			// 배열 입력 받기
			int[][] mp = new int[n][n];

			for (int i = 0; i < mp.length; i++) {
				for (int j = 0; j < mp.length; j++)
					mp[i][j] = sc.nextInt();
			}

			// ans: 맵에 단어가 들어갈 수 있는 구간의 개수
			int ans = 0;

			// check() call
			ans += check(0, n, k, mp);
			ans += check(1, n, k, mp);

			System.out.printf("#%d %d\n", t + 1, ans);
		}

		sc.close();

	}

}
  • 연속해서 1이 나온다면 카운팅을 한다.
  • 중간에 0이 나온다면 카운트를 다시 초기화한다.
  • 근데 초기화를 하기 전에 cnt 가 k라면 total cnt를 세준다.
  • 결론적으로는 total cnt를 return 한다.









# SWEA 어디에 단어가 들어갈 수 있을까 # SW Expert Academy


728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > SW Expert Academy' 카테고리의 다른 글

[SW1961] 숫자 배열 회전  (0) 2022.07.14
[SW2001] 파리퇴치  (0) 2022.07.12
[SW1959] 두 개의 숫자열  (0) 2022.07.07
[SW10505] 소득 불균형  (0) 2022.05.29
[SW10580] 전봇대  (0) 2022.05.29