문제 풀이 날짜: 2023.07.24
포스트 작성일: 2023.07.24
* 학습 목적으로 작성하는 글입니다. 풀이가 정석적이지 못할 수도 있습니다.
문제 출처
Software Expert Academy 11979번: 어디에 단어가 들어갈 수 있을까 (D2)
키워드
구현, 완전 탐색
풀이 접근법
- 주어진 단어가 들어가려면 1로 된 칸이 연속적으로 존재해야 한다.
- 어떻게 해야 칸이 연속적으로 K개만 존재하도록 만들 수 있을까를 고민해봐야 한다.
코드
import java.io.*;
import java.util.StringTokenizer;
public class SWEA1979 {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int test_case = 1; test_case <= T; test_case++) {
String[] temp = br.readLine().split(" ");
int N = Integer.parseInt(temp[0]);
int K = Integer.parseInt(temp[1]);
int[][] matrix = new int[N][N];
StringTokenizer st;
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < N; j++) {
matrix[i][j] = Integer.parseInt(st.nextToken());
}
}
int answer = 0;
int curr = 0;
int prev = 0;
int len = 0;
for(int i = 0; i < N; i++) {
curr = 0;
prev = 0;
len = 1;
for(int j = 0; j < N; j++) {
curr = matrix[i][j];
if(curr == 1) {
if(prev == 1) {
len++;
}
else { //prev == 1
prev = 1;
}
}
else if(curr != 1) {
if(len == K) {
answer++;
}
prev = 0;
len = 1;
}
}
if(len == K) {
answer++;
}
}
for(int j = 0; j < N; j++) {
curr = 0;
prev = 0;
len = 1;
for(int i = 0; i < N; i++) {
curr = matrix[i][j];
if(curr == 1) {
if(prev == 1) {
len++;
}
else { //prev == 1
prev = 1;
}
}
else if(curr != 1) {
if(len == K) {
answer++;
}
prev = 0;
len = 1;
}
}
if(len == K) {
answer++;
}
}
sb.append("#").append(test_case).append(" ").append(answer).append("\n");
}
System.out.print(sb);
}
}
좀처럼 깔끔한 풀이가 나오지 않는 문제이다. 배열의 가로와 세로를 각각 탐색할 때 필연적으로 중복된 코드가 발생하는데, 이것을 모듈로 분리하고 리팩토링 하는 것이 관건일 듯하다.
git 링크
https://github.com/jinju9553/23-CodingTest/blob/main/second/week4/day2/SWEA1979.java
'Study > Problem Solving' 카테고리의 다른 글
[SWEA / Java] 1493번: 수의 새로운 연산 (D3) (0) | 2023.07.25 |
---|---|
[SWEA / Java] 1954번: 달팽이 숫자 (D2) (0) | 2023.07.25 |
[백준 / Java] 10971번: 외판원 순회2 (실버2) (0) | 2023.05.25 |
[SWEA / Java] 1859번: 백만 장자 프로젝트 (D2) (0) | 2023.05.25 |
[백준 / Java] 1874번: 스택 수열 (실버2) (0) | 2023.05.25 |