본문 바로가기

Problem Solving/백준

백준 1316번

반응형

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

문제풀이 핵심은 for 반복문 중첩을 활용했다.

그룹단어 체크 메소드에서 값을 입력받고 그룹단어라면 0을 출력하고 아니라면 1을 출력하게하였다.

만약 aabca라는 값을 입력받는다면

맨 첫번째 값 a를 temp로 지정하고 temp와 뒤에값 a,b,c,a 를 순서대로 비교해간다. 

비교해가다가 a와 다른 알파벳 b를 만나게되면 

b뒤에 있는 값 c,a 중 현재 temp와 같은 a가 있는지 검사한다.

있다면 그룹단어 1을 출력한다.

이런식으로 계속 입력받은 단어들을 반복 비교한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.util.Scanner;
public class Main1316 
{    
    public static void main(String[] args) 
   {
    
    Scanner sc= new Scanner(System.in);
   
    int wordCount = sc.nextInt();//입력 단어 갯수
    
    int output = wordCount;//일단 입력받은 단어들이 전부 그룹단어라고 가정
    
    sc.nextLine();
    
    String words = new String();
    
    for(int i=0; i<wordCount; i++) {
        words = sc.nextLine().trim();
        output = output - groupCheck(words);//그룹단어 체크
    }
    System.out.println(output);//그룹단어수 출력
   }
    
    static int groupCheck(String words) 
   {//그룹단어라면 0리턴, 아니라면 1리턴
        
        char temp;
        
        int groupWord = 0;//일단 0을주고 그룹단어로 가정하고 시작 
        
        char[] currentWord = words.toCharArray();//문자 배열로 담는다
        temp = currentWord[0];
        
        outerLoop:
        for(int k=1; k<currentWord.length; k++) {//단어하나씩 접근
            if(temp != currentWord[k]) {//비교를 통해 temp의 값과 다른값이 나온다면
                for(int j=k+1; j<currentWord.length; j++) {//그룹단어인지 체크 반복
                    if(temp == currentWord[j]) {//그룹단어가 아니라면
                        groupWord = groupWord+1;//1을 더하고 출력
                        break outerLoop;//반복문 2개 빠져나가자
                    }
                }
                temp=currentWord[k];//비교 값을 바꿔준다
            }
        }
       return groupWord;//그룹단어가 아니라면 1출력 맞으면 0출력
    }
}
cs


반응형

'Problem Solving > 백준' 카테고리의 다른 글

백준 2941번  (0) 2019.01.26
백준 1152번  (0) 2019.01.26
백준 10809번  (0) 2019.01.24
백준 2908 상수  (0) 2019.01.20
백준 1158 번  (0) 2019.01.06