그룹 단어 체커

곽지욱·2023년 9월 6일

BOJ

목록 보기
16/69
post-thumbnail

백준 1316번 : 그룹 단어 체커 S5

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; // 그룹 단어 인지
  • Scanner를 이용하는 방법을 사용함 그룹 단어의 개수를 입력하기 위해 변수 N을 선언.
  • 그룹 단어 개수를 카운트 하기 위해 cnt 변수도 초기화 시켜준다.
  • 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개의 댓글