umilove98의 블로그

백준 1544 Java 자바 본문

algorithm/백준

백준 1544 Java 자바

umilove98 2021. 8. 17. 11:47
반응형

단어를 입력받아 해당 단어가 기존에 있던 단어의 사이클 단어인지 비교한다. 

기존에 있던 모든 단어들 중 입력받은 단어와 글자 수가 같은 단어들을 골라 해당 단어를 한 글자씩 돌려가며 입력받은 단어와 비교한다. 

비교 중 완전히 같은 단어가 만들어지면 입력단어는 기존 단어의 사이클 단어이므로 패스

기존에 있던 모든 단어들과 비교해봤지만 같은 단어가 만들어지지 않았다면 새로운 단어이므로 리스트에 입력

이를 반복하여 총 리스트에 입력된 단어들의 개수를 출력하면 된다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
 
public class Q1544 {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        ArrayList<String> list = new ArrayList<String>();    // 새로운 글자가 입력되면 저장할 리스트 생성
        for(int i = 0; i < n; i++) {
            String word = br.readLine();
            boolean isequal = false
            
            for(int j = 0; j < list.size(); j++) {
                if(list.get(j).length() == word.length()) {    // 저장되어 있는 단어들 중 현재 입력단어와 글자 수가 똑같은것들만 비교 
                    if(compare(list.get(j), word)) {
                        isequal = true;
                        break;
                    }
                }
                
            }
            if(isequal == false) {    // 기존에 있던 글자가 아닌것으로 정해지면 리스트에 추가시킴
                list.add(word);
            }
        }
        System.out.println(list.size());    // 리스트의 사이즈가 문자들의 종류이므로 출력시켜줌
    }
    
    public static boolean compare(String s, String w) {
        boolean equal = false;
        StringBuffer sb = new StringBuffer();
 
        sb.append(s);
        for(int i = 0; i < s.length(); i++) {
            equal = true;
            for(int j = 0; j < s.length(); j++) {    // 해당 두 단어의 모든 글자가 똑같은지 확인
                if(sb.toString().charAt(j) == w.charAt(j)) {
                    
                }else {
                    equal = false;
                }
            }
            if(equal) {    // 서로 다른 글자가 하나라도 있다면 false이므로 계속 진행
                break;
            }
            sb = sb.append(sb.charAt(0)).deleteCharAt(0);    // 비교대상 단어의 맨 앞글자를 맨 뒤에 옮겨붙임
        }
        
        return equal;
    }
 
}
cs
반응형

'algorithm > 백준' 카테고리의 다른 글

백준 1730 Java 자바  (0) 2021.08.18
백준 2061 Java 자바  (0) 2021.08.18
백준 1712 Java 자바  (0) 2021.08.16
백준 1531 Java 자바  (0) 2021.08.13
백준 2010 Java 자바  (0) 2021.08.13