8892번: 팰린드롬백준/문제2024. 3. 27. 12:59
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/8892
언어 : Kotlin
문제 설명 :
팰린드롬은 어느 방향으로 읽어도 항상 같은 방법으로 읽을 수 있는 단어이다. 예를 들어, civic, radar, rotor, madam은 팰린드롬이다.
상근이는 단어 k개 적혀있는 공책을 발견했다. 공책의 단어는 ICPC 문제가 저장되어 있는 서버에 접속할 수 있는 비밀번호에 대한 힌트이다. 비밀번호는 k개의 단어 중에서 두 단어를 합쳐야 되고, 팰린드롬이어야 한다. 예를 들어, 단어가 aaba, ba, ababa, bbaa, baaba일 때, ababa와 ba를 합치면 팰린드롬 abababa를 찾을 수 있다.
단어 k개 주어졌을 때, 팰린드롬을 찾는 프로그램을 작성하시오.
입력 :
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 공책에 적혀져있는 단어의 수 k(1 ≤ k ≤ 100)가 주어진다. 다음 k개 줄에는 a부터 z까지 알파벳으로 이루어진 단어가 한 줄에 하나씩 주어진다. 모든 단어 길이의 합은 10,000보다 작거나 같다.
출력 :
각 테스트 케이스마다 팰린드롬을 출력한다. 만약, 가능한 팰린드롬이 여러 가지라면 아무거나 출력한다. 팰린드롬을 만들 수 없는 경우에는 0을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
2 5 aaba ba ababa bbaa baaba 3 abc bcd cde |
abababa 0 |
풀이 :
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 t = readLine().toInt()
repeat(t) {
val k = readLine().toInt()
var check = true
val arr = Array(k) { readLine() }
for (i in 0 until k - 1) {
if (check) {
for (j in i + 1 until k) {
if (i == j) break
if (isPalindrome(arr[i], arr[j])) {
bw.appendLine(arr[i] + arr[j])
check = false
break
}
if (isPalindrome(arr[j], arr[i])) {
bw.appendLine(arr[j] + arr[i])
check = false
break
}
}
}
}
if (check) bw.appendLine("0")
bw.flush()
}
bw.close()
}
fun isPalindrome(a: String, b: String): Boolean {
val temp = a + b
var isPalindrome = true
for (i in 0 until temp.length / 2) {
if (temp[i] != temp[temp.length - 1 - i]) {
isPalindrome = false
break
}
}
return isPalindrome
}
'백준 > 문제' 카테고리의 다른 글
11575번: Affine Cipher (0) | 2024.03.27 |
---|---|
18312번: 시각 (0) | 2024.03.27 |
27310번: :chino_shock: (0) | 2024.03.26 |
11383번: 뚊 (0) | 2024.03.26 |
5363번: 요다 (0) | 2024.03.26 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!