๐ŸŒž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์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.