Red Glitter Pointer

 

 

1972번: 놀라운 문자열

대문자 알파벳으로만 이루어져 있는 문자열이 있다. 이 문자열에 대해서 ‘D-쌍’이라는 것을 정의할 수 있는데, 이 문자열에 포함되어 있는, 거리가 D인 두 문자를 순서대로 나열한 것을 이 문

www.acmicpc.net

 

 

 

👇 내가 작성한 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;

        while(!(str = br.readLine()).equals("*")) {
            int result = 0;
            int num = 0;
            for(int i = 1; i < str.length(); i++) { // 놀라운 문자열일 경우 D-쌍의 개수
                num += i;
            }

            Set<String> set = new HashSet<>(); // 중복 제거를 위한 Set 선언

            if(str.length() <= 2) { // 1, 2글자일 경우 무조건 놀라운 문자열임
                System.out.println(str + " is surprising.");
            } else {
                for(int i = 1; i <= str.length() - 1; i++) {
                    for(int j = 0; j < str.length() - i; j++) {
                        String first = String.valueOf(str.charAt(j));
                        String second = String.valueOf(str.charAt(i + j));
                        set.add(first + second); // 조합한 두 문자를 set에 추가
                    }
                    result += set.size(); // set길이를 result 변수에 누적합
                    set.clear(); // set 초기화
                }
                if(result == num) System.out.println(str + " is surprising.");
                else System.out.println(str + " is NOT surprising.");
            }
        }
    }
}

 

 

느낀 점 및 정리 ✍️

1. set을 이용하여 중복 제거를 하였고, D-쌍마다 set의 크기를 result 변수에 더해주고 set을 초기화 시켜 놀라운 문자열일 경우의 문자열 개수와 일치하는지 판별해주었다. 

 

 

+ Recent posts

loading