[백준,BOJ 1316] 그룹 단어 체커(JAVA 구현)

2020. 10. 9. 13:25·CodingTest/백준 온라인 저지(BOJ)
반응형

-해법

import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        
        int n = in.nextInt(); // 입력 될 문자열의 개수
        int cnt = 0; // 그룹 단어의 수 
        
        String alph[] = new String[n]; // n개의 문자열 배열 생성
        boolean alph_check[] = new boolean[26]; // 알파벳의 재등장 여부를 판단할 변수
        
        for(int i=0;i<n;i++) { // 단어 입력
        	alph[i] = in.next();
        }
        
        for(int i =0;i<alph.length;i++){  // 문자열 배열 탐색      	
            cnt++; // 그룹 단어라는 가정하에 +1 시킨 뒤 판단한다.
            Arrays.fill(alph_check, false); // 단어마다 알파벳 재등장 여부를 판단할 배열을 초기화          
            for(int j=0;j<alph[i].length();j++){ // 한 단어를 탐색
            	// 단어의 마지막 숫자가 아니며 && 등장하지 않았던 알파벳이며 && 다음 알파벳과 일치하지 않으면
            	if(j!=alph[i].length()-1 && alph_check[alph[i].charAt(j)-97] == false && alph[i].charAt(j) != alph[i].charAt(j+1)) {
            		alph_check[alph[i].charAt(j)-97] = true; // 해당 알파벳의 그룹은 끝이므로 true로 체크한 뒤 넘어간다.
            	}else if(alph_check[alph[i].charAt(j)-97] == true) { // 이미 한 번 등장했던 알파벳이라면,
            		cnt-=1; // 그룹 단어라는 가정을 파기하고 -1 후 
            		break; // 탐색종료            		
            	}
            }
        }
        
        System.out.println(cnt); // 그룹 단어의 수 출력
        
        in.close();
        
    }
}

  이 문제는 단어의 입력과 탐색을 하는 과정에서 연속으로 등장하는 알파벳을 판단하는 조건문을 세우는 것이 요점이라 할 수 있겠다. 즉, happy라는 단어를 예로 들어보면.

 

  1. 완전 탐색 과정에서 h는 방문하지 않았으며 + 다음 나오는 알파벳과 동일하지 않으며 + 마지막 알파벳이 아니므로

  => 방문 체크를 한다.

  2. a 역시 위와 같다.

  3. 처음 등장하는 p는 1번과 같지만, 다음 단어가 동일하기 때문에 조건문을 무시하며 + 방문 체크되지 않았기 때문에 아직 그룹 단어 여부를 모르므로 다음 알파벳을 살펴본다.

  4. 다음 알파벳 역시 p이지만, 1번과 동일하므로

  => 방문 체크를 한다.

  5. 마지막 y는 마지막 알파벳이므로 첫 번째 조건문은 고려할 필요없이 단순히 방문 여부만 판단하면 된다.

  => 방문한적이 없으므로 그대로 반복문 종료

  6. 결국 happy는 그룹 단어이다.

 

  이와 같은 방식으로 하나의 단어씩 탐색을 수행하면 된다.

저작자표시 (새창열림)
'CodingTest/백준 온라인 저지(BOJ)' 카테고리의 다른 글
  • [백준,BOJ 10870] 피보나치 수 5(JAVA 구현)
  • [백준,BOJ 10872] 팩토리얼(JAVA 구현)
  • [백준,BOJ 2941] 크로아티아 알파벳(JAVA 구현)
  • [백준,BOJ 5622] 다이얼(JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    프로그래머스
    medium
    자바
    Easy
    next 14
    BOJ
    백준7576자바
    알고리즘
    백준1427
    component-scan
    백준2751
    boj1427
    백준
    TypeScript
    boj2108
    meidum
    leetcode 2236
    백준1260
    백준7576
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[백준,BOJ 1316] 그룹 단어 체커(JAVA 구현)
상단으로

티스토리툴바