본문 바로가기
코딩테스트 연습

[JAVA] 1316번 그룹 단어 체커

by HANdeveloper 2023. 10. 24.

import java.util.Scanner;

public class Main {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        int count = 0;
        int no = sc.nextInt();
        for(int i=0;i<no;i++){
            if(check() == true){
                count++;
            }
        }
        System.out.println(count);
    }
    public static boolean check() {
        boolean[] check = new boolean[26];
        String str = sc.next();
        int prev = 0;

        for(int i=0;i<str.length();i++){
            int now = str.charAt(i);

            if(prev != now){ //앞 뒤 문자가 다름
               if(check[now -'a']==false){ // 처음 나오는 문자
                   check[now -'a']=true;
                   prev = now;
               } else if (check[now-'a']==true){ // 이전에 나온적이 있는 문자 (중복된 문자)
                   return false;
               }

            } else { // 연속된 문자, 앞 뒤 문자가 같음
                continue;
            }
        }
        return true;
    }

}
  • 코드를 짜기 위해 크게 두 상황으로 나누어 생각하면 쉬움!
  • - 앞 뒤 문자가 다르다 : 이전에 나온 적이 있다 (==true) -> false 반환  || 처음 나온다 (==false) -> true 반환   
  • - 앞 뒤 문자가 같다 : true 반환

한 번 나왔던 알파벳 배열 위치에는 true를 넣어준다고 생각함!

한 번 더 나왔을 때에는 이전과 연속되어 나온 것이 아니라면 false로 변경해줌!!

 

=====> 윗 부분을 check() 함수에서 정의

 

=====> main() 함수에서 true 갯수 카운팅해주고 출력해주면 됨!

 

'코딩테스트 연습' 카테고리의 다른 글

[JAVA] 1157번 단어공부 문제!!  (1) 2023.10.23
[JAVA] 백준 3052 나머지  (0) 2023.10.17
[백준] 1008번 문제 A/B - java  (0) 2022.10.27

댓글