반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- 카카오
- stack
- NestJS
- 중간 평균값 구하기
- 삼성소프트웨어아카데미
- 코딩테스트
- mybatis
- array
- 프로그래머스
- 배열
- 인프런
- 그리디알고리즘
- SWEA
- 정렬
- js
- 코테
- 자료구조
- 백준
- 코테준비
- 콜백지옥
- 스텍
- 자바스크립트
- javascript
- java
- AtoZ0403
- 자바
- 코딩
- 삼성
- spring
Archives
- Today
- Total
개발에 AtoZ까지
[JAVA][D2] 1979. 어디에 단어가 들어갈 수 있을까 본문
반응형
문제
N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다.
주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라.
[예제]
N = 5, K = 3 이고, 퍼즐의 모양이 아래 그림과 같이 주어졌을 때
길이가 3 인 단어가 들어갈 수 있는 자리는 2 곳(가로 1번, 가로 4번)이 된다.
[제약 사항]
1. N은 5 이상 15 이하의 정수이다. (5 ≤ N ≤ 15)
2. K는 2 이상 N 이하의 정수이다. (2 ≤ K ≤ N)
[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
테스트 케이스의 첫 번째 줄에는 단어 퍼즐의 가로, 세로 길이 N 과, 단어의 길이 K 가 주어진다.
테스트 케이스의 두 번째 줄부터 퍼즐의 모양이 2차원 정보로 주어진다.
퍼즐의 각 셀 중, 흰색 부분은 1, 검은색 부분은 0 으로 주어진다.
[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
예시
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
int T = Integer.parseInt(br.readLine());
// 테스트케이스 반복
for (int i = 1; i <= T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// 바둑판 크기
int N = Integer.parseInt(st.nextToken());
// 단어 크기
int K = Integer.parseInt(st.nextToken());
String[] numStr = new String[N];
// 값 입력하기
for (int x = 0; x < N; x++) {
numStr[x] = br.readLine();
}
System.out.println("#" + i + " " + count(numStr,N,K));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static int count(String[] numStr, int N, int K) {
int count = 0;
//x축으로 이동했을때 찾은 공간
int xWordCount=0;
//y축으로 이동했을때 찾은 공간
int yWordCount=0;
//x축 검색
for (int i = 0; i < N; i++) {
xWordCount=0;
//입력받은 값중 빈공간도 모두 받았기에 2씩 움직임
for (int j = 0; j < N*2; j+=2) {
//1인지 확인
if (numStr[i].charAt(j)=='1') {
xWordCount++;
}
//0이 이면서 xWordCount가 K가 아닌경우 ex) 11001
else if(numStr[i].charAt(j)=='0'&&xWordCount!=K) {
xWordCount=0;
}
//0이 이면서 xWordCount가 K값과 같은경우 ex) 1110111
else if(numStr[i].charAt(j)=='0'&&xWordCount==K) {
count++;
xWordCount=0;
}
}
//연속으로 K만큼만 있었다는 뜻
if(xWordCount==K) {
count++;
}
}
//y축 검색
for (int i = 0; i < N*2; i+=2) {
yWordCount=0;
for (int j = 0; j < N; j++) {
//1인지 확인
if (numStr[j].charAt(i) == '1') {
yWordCount++;
}
else if(numStr[j].charAt(i) == '0'&&yWordCount!=K){
yWordCount=0;
}
else if(numStr[j].charAt(i) == '0'&&yWordCount==K){
yWordCount=0;
count++;
}
}
//연속으로 K만큼만 있었다는 뜻
if(yWordCount==K) {
count++;
}
}
return count;
}
}
반응형
'코딩테스트 준비 > SWEA' 카테고리의 다른 글
[JAVA][D2] 1970. 쉬운 거스름돈 (0) | 2021.01.10 |
---|---|
[JAVA][D2] 1976. 시각 덧셈 (0) | 2021.01.10 |
[JAVA][D2] 1976. 시각 덧셈 (0) | 2021.01.08 |
[JAVA][D1] 1545. 거꾸로 출력해 보아요 (0) | 2021.01.08 |
[JAVA][D1] 2019. 더블더블 (0) | 2021.01.08 |
[JAVA][D1] 1936. 1대1 가위바위보 (0) | 2021.01.08 |
[JAVA][D2] 1983. 조교의 성적 매기기 (0) | 2021.01.07 |
Comments