본문 바로가기
Algorithm/Baekjoon

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

by unknownomad 2022. 3. 22.

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

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

www.acmicpc.net



주의점

  • 문자열의 문자가 연속되지 않아야 함 + 이전에 해당 문자가 입력된 적이 있으면 그룹 단어가 아님
  • 그룹 단어의 개수 출력

풀이

1. Scanner

import java.util.Scanner;
 
public class Main {

    /*
    main & check 함수에서 Scanner 쓰기에
    main 함수 밖에 전역 변수로 static 붙인 Scanner 생성
    */
    static Scanner in = new Scanner(System.in);
 
    public static void main(String[] args) {
        int count = 0;
        int N = in.nextInt();

        for (int i = 0; i < N; i++) {
            if (check() == true) {
                count++;
            }
        }
        System.out.println(count);
    }

    public static boolean check() {
        boolean[] check = new boolean[26];
        int prev = 0;
        /*
        문자열 입력 받을 때 nextLine() 쓰면 에러 발생
        개행이 버퍼에 남아있기에 다음 입력 때 개행이 str에 저장됨
        */
        String str = in.next();
		
        for(int i = 0; i < str.length(); i++) {
            int now = str.charAt(i); //i 번째 문자 저장(현재 문자)
			
            //이전 문자와 i 번째 문자가 불일치하면
            if (prev != now) {		
                //해당 문자가 처음 나올 때(= false 일 때)
                if (check[now - 'a'] == false) {
                    check[now - 'a'] = true;
                    prev = now; //다음 순서 위해 prev 값 변경
                } else {
                //해당 문자가 이미 나온 적이 있을 때(= 그룹 단어가 아니게 됨)
                    return false; //함수 종료
                }
            } else {
            //이전 문자와 i 번째 문자가 일치하면(= 연속된 문자)
            //else 문 생략 가능
                continue;
            }
        }
        return true;
    }
}

 

2. BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
    /*
    BufferedReader 는 예외로 IOException 던짐
    입력이 반드시 들어가는 main & check 함수 옆에 throws IOException 추가
    */
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {
        int count = 0;
        int N = Integer.parseInt(br.readLine()); //String to int

        for (int i = 0; i < N; i++) {
            if (check()) {
                count++;
            }
        }
        System.out.print(count);
    }

    public static boolean check() throws IOException {
        boolean[] check = new boolean[26];
        int prev = 0;
        String str = br.readLine();
		
        for(int i = 0; i < str.length(); i++) {
            int now = str.charAt(i);

            if (prev != now) {		
                if (!check[now - 'a']) {
                    check[now - 'a'] = true;
                    prev = now;	
                } else {
                    return false;	
                }
            }
        }
        return true;
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/69

댓글