Bakejoon/Silver

[Java] 백준 1316번 : 그룹 단어 체커 <Silver 5>

chattymin 2022. 6. 19. 22:18
728x90
반응형

⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️

 

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

Code


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int num = scanner.nextInt();
        int count = 0;

        for(int i = 0; i < num; i++){
            int result[] = new int[27];
            char now = '!';
            String string = scanner.next();
            for(int j = 0; j < string.length(); j++ ){
                if(result[(int)string.charAt(j) - 96] != 0 && !(string.charAt(j) == now)) {
                    result[(int)string.charAt(j) - 96] = 100;
                    count++;
                    break;
                }else if(result[(int)string.charAt(j) - 96] == 0 && !(string.charAt(j) == now)) {
                    result[(int)string.charAt(j) - 96]++;
                }
                now = string.charAt(j);
            }
        }
        System.out.println(num - count);
    }
}

Code 필수 요소

1. String의 원소 하나씩 확인 방법

2. 연속된 문자 체크 방법

 

이것만 생각해내면 절반은 끝났다.

 

// String의 원소 하나씩 확인 방법

charAt(j)를 사용할 경우 string의 j 인덱스 위치의 값을 char형으로 반환해준다. 이를 활용해서 비교하면 된다.

 

// 연속된 문자 체크 방법

먼저 조건들을 정리해준다. 1. 연속되어있다면 같은 문자가 여러번 나와도 된다.2. 같은 문자 사이에 다른 문자가 존재하면 안된다.

 

이를 활용해서 조건을 만들어줬다.연속되어있다는 확인은 이전의 문자와 비교해서 같다면 이번 문자는 연속된 것이고, 다르다면 연속되던 문자가 종료되었다는 것으로 판단했다. 그리고 int형 배열을 만들어 각 문자가 나왔었는지 확인하는 방식을 만들었다.즉, 배열내부 값이 0이 아니라면 해당 문자가 이미 나왔었다 판단. 직전의 문자와 비교했을때 같다면 연속된 문자이므로 그룹으로 판단.만약 이전에 나왔던 문자인데 직전값과 비교했을때 다르다면 그룹을 벗어난 문자라고 판단하였다.

 

 

확인 방법 자체는 쉽게 짰는데 String에서 char값 하나 빼내는 방법 생각하는게 오래걸렸다. 요새 C만 공부해서 그런가...자바 다시 제대로 시작해야 할듯.

 

 

-꿑-

 

728x90
반응형