Hope Everyone Is Happy

[실버5] 1316. 그룹 단어 체커 (Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[실버5] 1316. 그룹 단어 체커 (Java)

J 크 2023. 7. 30. 23:40
728x90
반응형

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

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

내일 있을 일정을 위해  조금 더 기초에 가까운 문제를 여러개 풀어보는 중입니다..! 22


※  문제를 요약하면 아래와 같습니다.

그룹 단어를 체크하는 문제입니다.

그룹 단어는 aabbbcddde 처럼 알파벳이 한 번 사용 될 때 연속으로 작성이 가능하지만, 한 번 사용한 단어는 다시 뒤에 사용되지 않습니다.

   (Ex. baekjoon (o), ssafy (o), leetcode (x)

 위의 조건에 따라서 입력은 맨 첫줄에 단어(소문자만)의 갯수를 입력 받고, 이후 라인 별로 하나의 단어를 입력받습니다.

 출력은 입력된 단어 중 그룹 단어의 갯수를 출력합니다.

◈ Input - 1

3
happy
new
year

◈ Output - 1

3

◈ Input - 2

4
aba
abab
abcabc
a

◈ Output - 2

1

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

알파벳 소문자의 갯수는 26개로 ASCII code로는 97~122까지 해당합니다. ( a =97 ~ z = 122)

▶ 알파벳이 사용되었는지 여부를 확인하기 위해, 26의 크기를 갖는 boolean형 배열을 설정합니다.

▶ 배열의 인덱스 번호를 0번 부터 26번까지 받기 위해, 문자 비교시 -97을 실행합니다.

▶ 단어의 연속 여부를 탐색, 단어가 더 이상 사용되지 않을 경우의 번호를 true로 설정합니다.

문자 탐색 시 해당 알파벳의 방 번호가 true일 경우 그룹 단어로 카운트 하지 않습니다.

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

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));

        int nSize = Integer.parseInt(bReader.readLine());
        
        // ASCII code a~z = 97~122
        boolean[] barrASCII;
        
        int nResult = 0;
        
        for(int i = 0; i < nSize; i++) {
        	boolean bIsBreak = false;
        	barrASCII = new boolean[26]; // false로 초기화
        	
        	String strTemp = bReader.readLine();
        	
        	for(int j = 0; j < strTemp.length(); j++) {
        		int nIndex = strTemp.charAt(j) - 97;

        		if(barrASCII[nIndex]) {
        			bIsBreak = true;
        			break;
        		}
        		
                // 마지막 인덱스는 해당 문자 사용 여부만 체크.
        		if(j == strTemp.length()-1)
        			break;
        		
                // 단어가 바뀔경우
        		if(strTemp.charAt(j) != strTemp.charAt(j+1) && !barrASCII[nIndex])
        			barrASCII[nIndex] = true;
        	}
            // 그룹 단어 확인 시 카운트
        	if(!bIsBreak)
        		nResult++;
        }
        
        System.out.println(nResult);
	}
}

 

긴 글 읽어주셔서 감사합니다!

Good Luck! (피드백 고맙습니다)