알고리즘🪺/백준

[JAVA] 백준 1316번: 그룹 단어 체커

SU_VIN 2022. 12. 4. 21:06
반응형

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

 


주먹구구식으로 로직을 짜보았습니다! 일단 문자열을 압축시키고 ex) aaabbffb -> abfb 그 후에 문자열 인덱스마다 이 이후에 같은 문자가 

나오는지를 체크! 하는 로직입니다!

 


import java.util.Scanner;
import java.util.Stack;

public class BJ_CT_9 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int result = 0;
        
        for (int i = 0; i < n; i++) {
            String s = ""; //압축된 문자열 받을 변수
            String str = sc.next(); //문자열 입력해주고
            Stack<Character> st = new Stack<>();//압축된 문자열 우선은 스택으로 받아줘요
            st.push(str.charAt(0));
            for (int k = 1; k < str.length(); k++) { //문자열 압축!
                if (st.peek() != str.charAt(k)) st.push(str.charAt(k));
            }

            for (int l = 0; l < st.size(); l++) s += st.get(l); //스택에서 스트링변수로 옮겨줍니다


            for (int j = 0; j < s.length(); j++) {
                if(s.indexOf(s.charAt(j),j+1)>=0){//포함! 그룹단어 아님
                    result++;
                    break;
                }
            }

        }
        System.out.println(n-result); //총단어수에서 그룹단어가 아닌 단어를 뺌
    }}

s.indexOf(s.charAt(j),j+1)>=0 이 부분의 뜻은 s.charAt(j) 단어가 j+1인 덱스 이후로 있으면 그 인덱스의 번호를 리턴해줍니다

그래서 0보다 큰지 보고 크다면 포함하여 그룹단어가 아니기 때문에 결괏값을 ++ 해준 것입니다 ..#헷 

 

 

어리바리 좀 까다가 코드 다짜두고서 3번이나 실패해버린 ㅡㅡ;;; 참눼 정신 체리!

우여곡절 끝에 통과!

 

 

반응형