[백준] - 단계별로 풀어보기(문자열) 1316

김민경·2022년 4월 13일
0

백준

목록 보기
39/39

백준 1316번

그룹 단어 체커

문제 출처 https://www.acmicpc.net/problem/1316


내가 작성한 코드

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

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int count=0; //그룹 단어의 개수
		
		for(int y=0; y<n; y++) {
			String s = br.readLine();
			boolean alp[] = new boolean[26]; //새로운 단어가 들어올때마다 false로 초기화
			int word = 0; //새로운 단어가 들어올때마다 word는 0으로 초기화
			
			for(int i=0; i<s.length(); i++) {
				if(alp[s.charAt(i)-97]) { //이미 언급한 알파벳이면
					if(s.charAt(i)!=s.charAt(i-1)) { //바로 전의 알파벳과 연속이 안된다면
						word++; // 단어 카운트를 올린다.(그룹단어가 아니라는 뜻)
						break;
					}
				}
				else { //한번도 나오지 않았던 알파벳이라면
					alp[s.charAt(i)-97]=true; //해당 알파벳이 true를 준다.
				}
				
			} 
			if(word==0) { //i의 반복문이 다 돌고도 word가 0으로 유지되어있다면
				count++;
			}
		}
		System.out.print(count); //그룹단어 개수
	}
}

접근 방법

  1. 새로운 문자열을 읽을 때마다 apl[ ]를 false로 초기화 하며, word를 0으로 초기화한다.
  2. charAt를 이용하여 -97을 하며 아스키 코드를 이용하여 097은 'a'를 뜻하므로 'a'가 들어오면 apl[0] = true를 해준다.
    ex) c -> apl[099('c')-97] = apl[2] = true
  3. 만약 이미 true로 바뀐 알파벳의 문자인 경우는 바로 전 문자와 같은 문자면 상관 없지만 다르면 바로 그룹단어가 아니므로 word 카운트를 올리고 for문을 나간다.
    ex) aba -> apl[0] = true인 상태에서 3번째로 a 가 또 들어왔을 때 바로 전 문자가 b이므로 그룹문자가 아니다.
  4. 문자 길이만큼 반복문을 다 돈 후, word가 처음 0이 그대로 이면 그 문자는 그룹단어이다. count에 +1을 하여 그룹단어의 개수를 세준다.

0개의 댓글

관련 채용 정보