1544번: 사이클 단어백준/문제2024. 4. 19. 14:47
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1544
언어 : Kotlin
문제 설명 :
사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에 단어 A와 단어 B가 있을 때, 단어 B를 원형으로 써서, 단어 A와 같이 읽을 수 있으면, 두 단어는 같은 단어이다. 따라서, picture와 turepic은 같은 단어다.
N개의 단어가 주어졌을 때, 서로 다른 단어가 총 몇 개인지 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 단어가 한 줄에 하나씩 주어진다. 단어는 영어 소문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이며, 단어의 길이는 최대 50이다.
출력 :
첫째 줄에 서로 다른 단어가 몇 개인지 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 128MB
입출력 예 :
입력 | 출력 |
5 picture turepic icturep word ordw |
2 |
7 ast ats tas tsa sat sta ttt |
3 |
5 aaaa aaa aa aaaa aaaaa |
4 |
풀이 :
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 arr = Array<ArrayList<String>>(n) { ArrayList() }
var cnt = 0
for (i in 0 until n) {
arr[i] = ArrayList()
val cur = readLine()
for (j in cur.indices) {
arr[i].add(cur.substring(j) + cur.substring(0, j))
}
var check = true
for (j in 0 until i) {
for (k in arr[j].indices) {
if (cur == arr[j][k]) check = false
}
}
if (check) cnt++
}
bw.write("$cnt")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
16719번: ZOAC (0) | 2024.04.22 |
---|---|
9248번: Suffix Array (0) | 2024.04.22 |
2154번: 수 이어 쓰기 3 (0) | 2024.04.19 |
11585번: 속타는 저녁 메뉴 (0) | 2024.04.19 |
3033번: 가장 긴 문자열 (1) | 2024.04.18 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!