문제 풀이/백준
[백준] 1706번. 크로스워드(JAVA)
27200
2025. 2. 12. 21:53
문제
https://www.acmicpc.net/problem/1706
풀이(19분)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
char[][] arr = new char[r][c];
for(int i = 0; i < r; i++){
String line = br.readLine();
for(int j = 0; j < c; j++){
arr[i][j] = line.charAt(j);
}
}
StringBuilder sb = new StringBuilder();
List<String> list = new LinkedList<>();
for(int i = 0; i < r; i++){
sb.setLength(0);
for(int j = 0; j < c; j++){
if(arr[i][j] != '#'){
sb.append(arr[i][j]);
continue;
}
if(sb.length() > 1){
list.add(sb.toString());
}
sb.setLength(0);
}
if(sb.length() > 1){
list.add(sb.toString());
}
}
for(int i = 0; i < c; i++){
sb.setLength(0);
for(int j = 0; j < r; j++){
if(arr[j][i] != '#'){
sb.append(arr[j][i]);
continue;
}
if(sb.length() > 1){
list.add(sb.toString());
}
sb.setLength(0);
}
if(sb.length() > 1){
list.add(sb.toString());
}
}
Collections.sort(list);
System.out.println(list.get(0));
}
}
실버2치고 매우 단순한 문제라고 생각하여 접근했지만 꼼꼼하게 조건식을 체크하지 않아 한번 틀리고 맞추었다.
체크하지 못한 부분은
#이 나와서 길이가 1 이상이면 list에 추가하는 로직 안에 sb를 초기화하는 것을 넣었다.
이 경우 a#b 일 때 sb가 초기화되지 않는 문제가 발생할 수 있었다.
또한, 문제에서 아쉬운 부분은 단어라는 것이 중복될 수 있는지 없는지가 애매모호 하여 자료구조 선정하는 부분에서 고민이 되었다.
물론, 사전식 배열이기 때문에 중복된 단어가 있어도 첫번째로 나올 단어는 나오게 된다. -> 그래도 아쉽다.