백준 1316 그룹단어체커

Eunkyung·2021년 11월 2일
0

Algorithm

목록 보기
7/30

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

문제해결

문자의 연속유무를 파악하는 것이 포인트

  1. 그룹단어인지 아닌지 체크하기 위한 check() 메소드 생성
  2. 알파벳 개수만큼 check 배열 선언 후 이전 문자와 현재 문자를 비교하기 위한 변수 선언
  3. 이전 문자와 현재 문자가 같지 않다면
  4. 해당 문자가 처음 나오는 경우 check 배열의 값 true로 변환, 그렇지 않으면 return false
  5. 이전 문자와 현재 문자가 같으면 continue
  6. check() 메소드 호출하여 true일 경우에만 count 증가하여 결과값 출력

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class b1316 {
    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());
        for (int i = 0; i < n; i++) { // 그룹 단어 체커 함수 n번 실행
            if (check() == true) { // 그룹 단어일 경우 카운트 변수 증가
                count++;
            }
        }
        System.out.println(count);
    }

    // 그룹 단어 체크할 함수
    // 그룹 단어인지 아닌지 파악 -> return boolean
    public static boolean check() throws IOException {
        boolean[] check = new boolean[26]; // 알파벳 개수만큼 배열 생성, 그룹 단어 체크 배열
        int prev = 0; // 이전 문자와 연속 여부 파악 변수
        String s = br.readLine();
        for (int i = 0; i < s.length(); i++) {
            int now = s.charAt(i); // 현재 문자

            // 이전 문자와 i번째 문자가 같지 않다면?
            if (prev != now) {
                // 해당 문자가 처음 나오는 경우
                if (check[now - 'a'] == false) {
                    check[now - 'a'] = true; // true로 변경
                    prev = now; // 현재 문자는 이전 문자로 변경, 다음 들어올 문자가 현재 문자로 변경
                }
                // 해당 문자가 이미 나온 적 있는 경우 (그룹 단어가 아님)
                else {
                    return false;
                }
            } else { // 앞선 문자와 i번째 문자가 같다면? (연속된 문자)
                continue;
            }
        }
        return true;
    }
}
profile
꾸준히 하자

0개의 댓글