2804번: 크로스워드 만들기백준/문제2024. 2. 8. 13:13
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/2804
언어 : Kotlin
문제 설명 :
창영이는 크로스워드 퍼즐을 만들려고 한다.
두 단어 A와 B가 주어진다. A는 가로로 놓여야 하고, B는 세로로 놓여야 한다. 또, 두 단어는 서로 교차해야 한다. (정확히 한 글자를 공유해야 한다) 공유하는 글자는 A와 B에 동시에 포함되어 있는 글자여야 하고, 그런 글자가 여럿인 경우 A에서 제일 먼저 등장하는 글자를 선택한다. 마찬가지로 이 글자가 B에서도 여러 번 등장하면 B에서 제일 처음 나오는 것을 선택한다. 예를 들어, A = "ABBA"이고, B = "CCBB"라면, 아래와 같이 만들 수 있다.
. | C | . | . |
. | C | . | . |
A | B | B | A |
. | B | . | . |
입력 :
첫째 줄에 두 단어 A와 B가 주어진다. 두 단어는 30글자 이내이고, 공백으로 구분되어져 있다. 또, 대문자로만 이루어져 있고, 적어도 한 글자는 두 단어에 포함되어 있다.
출력 :
A의 길이를 N, B의 길이를 M이라고 했을 때, 출력은 총 M줄이고, 각 줄에는 N개 문자가 있어야 한다. 문제 설명에 나온 것 같이 두 단어가 교차된 형태로 출력되어야 한다. 나머지 글자는 '.'로 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
BANANA PIDZAMA | .P.... .I.... .D.... .Z.... BANANA .M.... .A.... |
MAMA TATA | .T.. MAMA .T.. .A.. |
REPUBLIKA HRVATSKA | H........ REPUBLIKA V........ A........ T........ S........ K........ A........ |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val (a, b) = readLine().split(" ")
val samPos = IntArray(2) { -1 }
val map = Array(b.length) { Array(a.length) { '.' } }
for (x in a.indices) {
if (samPos.minOf { it } == -1) {
for (y in b.indices) {
if (b[y] == a[x]) {
samPos[0] = y
samPos[1] = x
break
}
}
} else {
break
}
}
for (x in map[samPos[0]].indices) map[samPos[0]][x] = a[x]
for (y in map.indices) map[y][samPos[1]] = b[y]
map.map { bw.appendLine(it.joinToString("")) }
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
5555번: 반지 (1) | 2024.02.13 |
---|---|
11586번: 지영 공주님의 마법 거울 (0) | 2024.02.08 |
2002번: 추월 (1) | 2024.02.07 |
1551번: 수열의 변화 (1) | 2024.02.06 |
10769번: 행복한지 슬픈지 (0) | 2024.02.05 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!