문제 출처 : https://www.acmicpc.net/problem/25178
언어 : Kotlin
문제 설명 :
기령이는 어느 날 캠릿브지 대학의 연결구과에 대해 알게 되었다. 캠릿브지 대학의 연결구과란, 단어를 이해함에 있어 한 단어 안에서 글자들이 어떤 순서로 배열되어 있는지는 중요하지 않고, 양 끝의 글자가 올바른지만 중요하다는 이론이다. 즉 단어의 글자가 섞이더라도 양 끝의 글자만 그대로라면 원래의 단어를 쉽게 유추하여 이해할 수 있다는 것이다.
그러나 기령이는 "durumari"와 같은 단어를 "daumurri"로 바꾸게 된다면 원래의 단어를 유추하기 매우 어려워진다는 사실을 발견했다. 몇 날 며칠의 고민을 거듭한 끝에 위의 이론이 잘 작동할 수 있는 조건을 새롭게 찾아냈다.
한 단어를 재배열해 다른 단어를 만들 수 있어야 한다.
두 단어의 첫 글자와 마지막 글자는 서로 동일해야 한다.
각 단어에서 모음(a, e, i, o, u)을 제거한 문자열은 동일해야 한다.
기령이는 새로운 조건을 발견하게 해준 단어를 기려 이를 두라무리 효과라 부르기로 했다.
기령이는 이제 어떤 두 단어가 두라무리 효과를 발생시키는지 판별하고 싶다. 하지만 오랜 고민으로 지쳐 이를 판단할 기력이 남아있지 않다. 지친 기령이를 대신하여 이를 판별하는 프로그램을 작성해보자.
입력 :
첫째 줄에 단어의 길이 N(2 ≤ N ≤ 100,000)이 주어진다.
둘째 줄과 셋째 줄에는 길이가 N이고 알파벳 소문자로 이루어진 문자열이 주어진다.
출력 :
두 문자열이 조건을 만족한다면 YES, 만족하지 않는다면 NO를 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
8 durumari duramuri |
YES |
8 durumari darmurui |
YES |
8 durumari dumurari |
NO |
8 durumari darumari |
NO |
8 durumari abcdefgh |
NO |
풀이 :
조건 1: 두 문자열을 사전순으로 정렬 후, 각 요소 비교.
조건 2: 두 단어의 각각 첫 인덱스와 마지막 인덱스 접근 후, 비교.
조건 3: replace와 정규식을 사용해 모음을 제거 후, 문자열 비교.
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 n = readLine().toInt()
val a = readLine()
val b = readLine()
bw.write(if (isDuramuri(a, b)) "YES" else "NO")
bw.flush()
bw.close()
}
fun isDuramuri(a: String, b: String): Boolean {
if (a.first() != b.first() || a.last() != b.last()) return false
if (!a.toCharArray().sortedArray().contentEquals(b.toCharArray().sortedArray())) return false
val newA = a.replace("[aeiou]".toRegex(), "")
val newB = b.replace("[aeiou]".toRegex(), "")
return newA == newB
}
'백준 > 문제' 카테고리의 다른 글
13297번: Quick Estimates (0) | 2024.08.01 |
---|---|
27497번: 알파벳 블록 (0) | 2024.07.31 |
27962번: 오렌지먹은지오렌지 (0) | 2024.07.30 |
18245번: 이상한 나라의 암호 (0) | 2024.07.30 |
12174번: #include <Google I/O.h> (0) | 2024.07.26 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!