1411번: 비슷한 단어백준/문제2024. 5. 23. 01:03
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1411
언어 : Kotlin
문제 설명 :
만약 어떤 단어A를 숌스럽게 바꿔서 또다른 단어 B로 만든다면, 그 단어는 비슷한 단어라고 한다.
어떤 단어를 숌스럽게 바꾼다는 말은 단어 A에 등장하는 모든 알파벳을 다른 알파벳으로 바꾼다는 소리다. 그리고, 단어에 등장하는 알파벳의 순서는 바뀌지 않는다. 두 개의 다른 알파벳을 하나의 알파벳으로 바꿀 수 없고, 임의의 알파벳을 자기 자신으로 바꾸는 것은 가능하다.
예를 들어, 단어 abca와 zbxz는 비슷하다. 그 이유는 a를 z로 바꾸고, b는 그대로 b, c를 x로 바꾸면, abca가 zbxz가된다.
단어가 여러 개 주어졌을 때, 몇 개의 쌍이 비슷한지 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 한 줄에 하나씩 단어가 주어진다. 단어의 길이는 최대 50이고, N은 100보다 작거나 같은 자연수이다. 모든 단어의 길이는 같고, 중복되지 않는다. 또, 알파벳 소문자로만 이루어져 있다.
출력 :
첫째 줄에 총 몇 개의 쌍이 비슷한지 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
5 aa ab bb cc cd |
4 |
3 abca zbxz opqr |
1 |
12 cacccdaabc cdcccaddbc dcdddbccad bdbbbaddcb bdbcadbbdc abaadcbbda babcdabbac cacdbaccad dcddabccad cacccbaadb bbcdcbcbdd bcbadcbbca |
13 |
풀이 :
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))
var result = 0
val words = Array<String>(readLine().toInt()) { readLine() }
for (i in words.indices) {
for (j in i + 1 until words.size) {
var check = true
val hashmap = HashMap<Char, Char>()
for (k in 0 until words[j].length) {
val original = words[i][k]
val temp = words[j][k]
if (hashmap.containsKey(original)) {
if (hashmap[original] != temp) {
check = false
break
}
} else {
val keys = hashmap.keys.iterator()
while (keys.hasNext()) {
val key = keys.next()
if (hashmap[key] == temp) {
check = false
break
}
}
if (check) hashmap[original] = temp
}
}
if (check) result++
}
}
bw.write("$result")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
31495번: 그게 무슨 코드니.. (0) | 2024.05.23 |
---|---|
16499번: 동일한 단어 그룹화하기 (0) | 2024.05.23 |
18698번: The Walking Adam (0) | 2024.05.22 |
26264번: 빅데이터? 정보보호! (0) | 2024.05.22 |
3111번: 검열 (0) | 2024.05.22 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!