알고리즘

백준 1316 (Java)

Codult 2023. 11. 27. 17:54
728x90

1) 입력받은 문자열을 char 배열로 변환한다.

2) char 배열을 for문 돌리면서 동일한 알파벳이 나타나면, 해당 인덱스를 삽입할 List<Integer> sameChar를 선언한다.

3) for문을 돌려 해당 char 요소와 동일한 요소의 index를  미리 선언한 sameChar에 추가한다.

4) 그룹 단어가 아니라면, +2이상 차이나는 값이 sameChar에 연속적인 인덱스로 들어갈 수 밖에 없다.

  ex) ccaaaba -> sameChar에는 a에 대한 첫번째 for문 만으로 이미 '2', '3', '4', '6'이 들어간다. c의 경우, 연속적인 숫자가 들어가는 것은 아니지만 1이하(ex. -1, -2)로 차이가 있다.

5) sameChar에서 바로 다음 값과 +1 초과하는 차이가 날 때, 이는 그룹단어가 아니므로, 미리 선언해둔 nonGroup에 +1을 해주고, 바로 break 하여 중복으로 계산되지 않도록 한다.

6) 전체 입력받은 문자열의 갯수에서 nonGroup을 뺀 결과를 출력한다.  

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int nonGroup = 0; // 그룹단어가 아닌 단어의 갯수
        for (int i=0; i<num; i++){
            List<Integer> sameChar = new ArrayList<>();
            char[] word = sc.next().toCharArray();
            for (int j=0; j<word.length; j++){
               char c = word[j];
               for (int k=0; k<word.length; k++){
                   if (c==word[k]) sameChar.add(k);
               }
            }
            for (int k=0; k<sameChar.size()-1; k++){
                if (sameChar.get(k+1)-sameChar.get(k)>1) {
                    nonGroup++;
                    break;
                }
            }

        }
        System.out.println(num-nonGroup);

    }
}
728x90

'알고리즘' 카테고리의 다른 글

백준 1193 (Java)  (0) 2023.12.03
백준 2564 (Java)  (1) 2023.11.28
백준 25206 (Java)  (1) 2023.11.28
백준 2941 (Java)  (1) 2023.11.27
백준 1157 (Java)  (0) 2023.11.27