문제(출처: https://www.acmicpc.net/problem/1544)
< 사이클 단어 >
문제 풀이
단어 길이가 일치하다면 시계방향으로 읽었을 때 같은 단어인지 확인한다.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class _1544_ { // 사이클 단어
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
String str = bf.readLine();
boolean flag = false;
for (int j = 0; j < list.size(); j++) {
if (list.get(j).length() != str.length()) {
continue;
} else {
Queue<Integer> queue = new LinkedList<>();
for (int x = 0; x < list.get(j).length(); x++) {
if (list.get(j).charAt(x) == str.charAt(0)) {
queue.add(x);
}
}
while (!queue.isEmpty()) {
int start = queue.poll();
boolean check = false;
for (int x = start; x < list.get(j).length(); x++) {
if (str.charAt(x - start) != list.get(j).charAt(x)) {
check = true;
break;
}
}
if (!check) {
check = false;
for (int x = 0; x < start; x++) {
if (str.charAt(str.length() - start + x) != list.get(j).charAt(x)) {
check = true;
break;
}
}
if (!check) {
flag = true;
break;
}
}
}
}
if (flag) {
break;
}
}
if (!flag) {
list.add(str);
}
}
System.out.println(list.size());
}
}
변수)
n : 단어의 개수
list : 서로 다른 단어
str : 입력받은 단어
flag : 새로운 단어인지 같은 단어인지 판별
queue : 시작 위치 저장하는 Queue
start : 시작 위치
check : 같은 단어인지 판별
단어 개수를 입력받는다. 단어 개수만큼 단어를 입력받으면서 같은 단어인지 다른 단어인지 판단한다.
1) 단어 입력
2) list를 탐색
2-1) 길이가 같지 않다면 사이클 단어를 판단할 필요가 없으므로 넘김
2-2) 길이가 같다면 list 단어를 탐색 -> 입력받은 단어의 첫 번째 값과 list 단어 중에서 일치하는 인덱스를 찾아 queue에 저장 -> queue가 빌 때까지 반복 -> 사이클을 돌며 같은 단어인지 판단
3) 같은 단어가 아니라면 list에 단어 추가
최종 list의 길이를 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 11504_돌려 돌려 돌림판! (0) | 2024.05.27 |
---|---|
[Baekjoon] 2891_카약과 강풍 (0) | 2024.05.24 |
[Baekjoon] 3568_iSharp (0) | 2024.05.22 |
[Baekjoon] 2942_퍼거슨과 사과 (0) | 2024.05.20 |
[Baekjoon] 3018_캠프파이어 (0) | 2024.05.17 |