3005번: 크로스워드 퍼즐 쳐다보기백준/문제2024. 6. 13. 00:55
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/3005
언어 : Kotlin
문제 설명 :
크로스워드 퍼즐은 R*C크기의 직사각형으로 이루어져 있고, 각 칸은 비어있거나 막혀있다. 퍼즐은 가로(왼쪽->오른쪽) 또는 세로(위->아래)로 연속된 빈 칸에 단어를 채우면서 푼다.
동혁이는 크로스워드 퍼즐을 풀지 않는다. 그는 풀려있는 퍼즐을 쳐다본다. 그런 후에, 그는 그 퍼즐에서 사전순으로 제일 앞서는 단어를 찾는다. (단어는 적어도 2글자이다.)
크로스워드 퍼즐이 주어졌을 때, 사전순으로 제일 앞서는 단어를 출력하는 프로그램을 작성하시오.
입력 :
첫째 줄에 R과 C (2 ≤ R, C ≤ 20)가 주어진다. R는 행의 개수, C는 열의 개수이다. 그 다음 R개의 줄엔 C개의 문자가 포함되어 있다. 각 문자는 영어 알파벳 소문자 또는 '#'이며, '#'인 경우에는 막혀있는 것이다.
출력 :
첫째 줄에 사전순으로 제일 앞서는 단어를 출력한다. 정답이 항상 존재하는 경우만 입력으로 주어진다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
4 4 luka o#a# kula i#a# |
kala |
4 4 luka o#a# kula i#as |
as |
4 5 adaca da##b abb#b abbac |
abb |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (r, c) = readLine().split(" ").map { it.toInt() }
val note = mutableListOf<String>()
val map = Array(r) { readLine() }
for (i in map.indices) {
map[i].split("#").filter { it.length >= 2 }.forEach {
note += it
}
}
for (j in 0 until c) {
val sb = StringBuilder()
for (i in map.indices) {
sb.append(map[i][j])
}
sb.split("#").filter { it.length >= 2 }.forEach {
note += it
}
}
bw.write(note.sorted()[0])
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
2697번: 다음수 구하기 (0) | 2024.06.14 |
---|---|
21867번: Java Bitecode (0) | 2024.06.13 |
26004번: HI-ARC (0) | 2024.06.13 |
1942번: 디지털시계 (0) | 2024.06.12 |
16113번: 시그널 (0) | 2024.06.12 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!