🌞Algorithm/🔥Baekjoon

[Baekjoon] 1544_사이클 단어

뿌야._. 2024. 5. 23. 14:05

Silver IV

문제(출처: 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