그룹 단어 체커

곽지욱·2024년 2월 1일

BOJ

목록 보기
40/69

1316번 : 그룹 단어 체커

  • 입력은 소문자로 한정되어 있음
  • 각 문자가 그룹 단어 조건을 충족해야 함
  • 한번도 중복되지 않은 문자이거나, 중복된다면 직전 문자와 동일해야 하는 조건을 가져야 함
Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); //그룹 단어 개수
        int cnt = 0; // 그룹 단어 개수를 세는 변수

        for (int i = 0; i < N; i++) { //n만큼 반복하면서 문자열 입력받음
            String S = sc.next();
            boolean check[] = new boolean[26]; // 알파벳 사용 내역
            boolean tmp = true; // 그룹 단어 인지
  1. Scanner 를 이용하는 방법을 사용함 그룹 단어의 개수를 입력하기 위해 변수 N을 선언
  2. 그룹 단어 개수를 카운트 하기 위해 cnt 변수도 초기화 시켜준다.
  3. for 문을 N번 반복하면서 String 문자열을 입력 받고 해당 문자열의 단어들을 알파벳 인덱스에 넣어주기 위해 boolean 형 크기 26의 배열을 선언 (false)
for (int j = 0; j < S.length(); j++) {
                int index = S.charAt(j)-'a';  //단어의 아스키코드를 소문자로 변환해서 index 변수에 저장
                if(check[index]) { // 이전에 사용한적이 있는 문자라면
                    if(S.charAt(j) != S.charAt(j-1)) { // 이전 문자와 연속되지 않는다면
                        tmp = false; // 그룹 단어가 아님
                        break;
                    }
                }else { // 이전에 사용한적이 없는 문자라면
                    check[index] = true; // 문자 사용 체크
                }
            }
  • for 문을 S의 크기만큼 돌면서 index 에 단어 하나하나를 소문자로 변환해서 넣어주기 위해 int형 변수를 선언
  • 위의 제시됐던 두 가지 조건을 검사해준다 만약 이전에 사용한 적이 없다면 check[index]를 true로 설정
  • 이전에 사용한 적이 있는 문자라면 이전 문자와 연속되는지 체크, 연속되지 않는 다면 tmp를 false로 설정하고 break로 for문을 빠져나간다
import java.util.Scanner;

public class group_word {
    public static void main(String[] args) {

        //문자열의 문자가 연속되지 않으면서 이미 앞서 해당 문자가 입력된 적이 있을 경우 그룹 단어가 아니다.

        //이전 문자가 이미 존재했을 경우 ,

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); //그룹 단어 개수
        int cnt = 0; // 그룹 단어 개수를 세는 변수

        for (int i = 0; i < N; i++) { //n만큼 반복하면서 문자열 입력받음
            String S = sc.next();
            boolean check[] = new boolean[26]; // 알파벳 사용 내역
            boolean tmp = true; // 그룹 단어 인지

            for (int j = 0; j < S.length(); j++) {
                int index = S.charAt(j)-'a';  //단어의 아스키코드를 소문자로 변환해서 index 변수에 저장
                if(check[index]) { // 이전에 사용한적이 있는 문자라면
                    if(S.charAt(j) != S.charAt(j-1)) { // 이전 문자와 연속되지 않는다면
                        tmp = false; // 그룹 단어가 아님
                        break;
                    }
                }else { // 이전에 사용한적이 없는 문자라면
                    check[index] = true; // 문자 사용 체크
                }
            }


            if(tmp) cnt++;
        }

        System.out.println(cnt);
        // 이전에 사용한 적이 있다면 무조건 연속해야 함

    }
}

문제 자체가 어렵지는 않았지만 ‘그룹 단어’ 의 조건을 파악하는 데에 시간이 많이 소요 됨..
문제를 잘 읽고 조건을 파악하는 연습을 해야 할 듯.. 조건을 미리 설정하고 정리하니 코드를
작성하기 수월했음.

0개의 댓글