SW Expert Academy 1979. 어디에 단어가 들어갈 수 있을까 (Java, Kotlin)

: ) YOUNG·2022년 7월 1일
1

알고리즘

목록 보기
156/367

SW Expert Academy 1959. 두 개의 숫자열
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

문제



N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다.

주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라.


생각하기


  • 배열을 돌린다고 생각해보자.
  • 처음 생성된 배열에서 1로만 된 곳을 찾고, 다음은 가로를 세로로 바꿔서 다시 1로 된 곳을 찾는다

동작

			for(int i=0; i<N; i++) {
				st = new StringTokenizer(br.readLine());
				rowCount = 0;
				for(int j=0; j<N; j++) {
					int num = Integer.parseInt(st.nextToken());
					arr[i][j] = num;
					
					if(num == 1) {
						rowCount++;
					}
					else{
						if(rowCount == K) result++;
						rowCount = 0;
					}
				}
				if(rowCount == K) result++; // 줄이 바뀌고 난 후 다음 값도 1일 경우, 마지막 값을 계산해야 됨
			}

배열을 생성함과 동시에 가로로 나열된 1을 찾아서 K와 같은 길이의 공간을 찾는다.



코드



Java

import java.util.*;
import java.io.*;

public class Solution {
	static int arr[][];
	static int N, K;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		for(int t=1; t<=T; t++) {
			sb.append("#").append(t).append(' ');
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken()); // 가로 세로의 길이
			K = Integer.parseInt(st.nextToken()); // 단어의 길이
			arr = new int[N][N];
			int result = 0;
			int rowCount = 0;
			for(int i=0; i<N; i++) {
				st = new StringTokenizer(br.readLine());
				rowCount = 0;
				for(int j=0; j<N; j++) {
					int num = Integer.parseInt(st.nextToken());
					arr[i][j] = num;
					
					if(num == 1) {
						rowCount++;
					}
					else{
						if(rowCount == K) result++;
						rowCount = 0;
					}
				}
				if(rowCount == K) result++; // 줄이 바뀌고 난 후 다음 값도 1일 경우, 마지막 값을 계산해야 됨
			}
		
			result += find_column();
			sb.append(result).append('\n');
		}
		 
		bw.write(sb.toString()); bw.flush(); bw.close();
	} // End of main
	
	private static int find_column() {
		int colCount = 0;
		int result = 0;
		for(int i=0; i<N; i++) {
			colCount = 0;
			for(int j=0; j<N; j++) {
				int num = arr[j][i];
				
				if(num == 1) {
					colCount ++;
				}
				else {
					if(colCount == K) result++;
					colCount = 0;
				}
			}
			if(colCount == K) result++;
		}
		
		return result;
	} // End of find_column
} // End of main

Kotlin

import java.util.*
import java.io.*

private var N = 0; private var K = 0
private lateinit var arr : Array<IntArray>
fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`)
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))
    val sb = StringBuilder()

    var T = br.readLine().toInt()
    for(t in 1..T) {
        sb.append("#").append(t).append(' ')
        var st = StringTokenizer(br.readLine())
        N = st.nextToken().toInt(); K = st.nextToken().toInt()

        arr = Array(N){IntArray(N)}
        var rowCount = 0
        var result = 0
        for(i in 0 until N) {
            st = StringTokenizer(br.readLine())
            rowCount = 0
            for(j in 0 until N) {
                val num = st.nextToken().toInt()
                arr[i][j] = num

                if(num == 1) rowCount++
                else {
                    if(rowCount == K) result ++
                    rowCount = 0
                }
            }
            if(rowCount == K) result++
        }

        result += findColumn()
        sb.append(result).append('\n')
    }
    bw.write(sb.toString()); bw.flush(); bw.close()
} // End of main

private fun findColumn() : Int{
    var result = 0
    var colCount = 0
    for(i in 0 until N) {
        colCount = 0
        for(j in 0 until N) {
            val num = arr[j][i]
            if(num == 1) colCount++
            else {
                if(colCount == K) result++
                colCount = 0
            }
        }
        if(colCount == K) result++
    }
    return result
} // End of findColumn

0개의 댓글