SW Expert Academy 1959. 두 개의 숫자열
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다.
주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라.
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
와 같은 길이의 공간을 찾는다.
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
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