알고리즘

[백준/Java]Q1316

  • -
반응형

백준 알고리즘 7단계 문자열 1316번 문제입니다.


Q. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

[입력]
- 첫째줄 단어의 개수 N개가 주어진다.
- 둘째줄 N개의 단어가 주어진다. 

[조건]
- N은 100보다 작거나 같은 자연수이다.
- 주어진 단어는 알파벳 소문자로만 되어있고 중복되지 않는다.
- 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 
  Ex) ccazzzzbb => cazb 연속(그룹 단어) 
      abc => abc 연속(그룹 단어)
      test => t가 떨어져 나타남(그룹 단어X) 

 

풀이

이 문제의 접근은 그룹 단어의 정의에서 시작했다.

그룹 단어는 단어에 존재하는 모든 문자에 대해 각 문자가 연속해서 나타나는 경우만을 말한다.

결국 그룹 단어는 단어의 중복을 제거한 후에 마지막 문자를 비교해보면 되지 않을까 싶었다. 그룹 단어는 문자가 끝나고 난 이후에 또 같은 문자가 나오면 안되기 때문이다.

 

ccazzzzbb ☞ (중복 제거) cazb ☞ ccazzzzbb : cazb ☞ 마지막 문자 일치 ☞ 그룹 단어 O

abc ☞ (중복 제거) abc ☞ abc : abc ☞ 마지막 문자 일치 ☞ 그룹 단어 O

test ☞ (중복 제거) tes ☞ test : tes ☞ 마지막 문자 불일치 ☞ 그룹 단어 X

 

대략의 알고리즘을 그린 후 프로그램을 작성했다.

 

소스
package com.baek.algo;

import java.util.Scanner;

public class Q1316 {

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

		int n   = sc.nextInt();
		int cnt = 0;

		String wordArr[] = new String[n];

		for(int seq = 0; seq < n; seq++) {
			wordArr[seq] = sc.next();
		}

		for(int i = 0; i < wordArr.length; i++) {
			int pos = 0;

			String inputWord = wordArr[i].toLowerCase();
			String newWord   = "";

			// 1. 입력받은 문자 중 중복 문자 제거
			for(int j = 0; j < inputWord.length(); j++) {
				if(inputWord.indexOf(inputWord.charAt(j)) == j) {
					newWord = newWord + inputWord.charAt(j);
				}
			}

			// 2. 중복제거된 문자와 입력받은 문자 비교
			String inputWordArr[] = inputWord.split("");
			String newWordArr[]   = newWord.split("");

			for(int h = 0; h < newWordArr.length; h++) {
				String text = newWordArr[h];

				for(int k = pos; k < inputWordArr.length; k++) {
					if(!text.equals(inputWordArr[k])) {
						pos = k;
						break;
					}
				}
			}

			if(newWordArr[newWordArr.length - 1].equals(inputWordArr[pos])) {
				cnt = cnt + 1;
			}
		}

		System.out.println(cnt);

		sc.close();
	}
}

 

반응형

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

[백준/Java]Q2292  (0) 2021.07.12
[백준/Java]Q1712  (0) 2021.07.12
[백준/Java]Q1712  (0) 2021.07.08
[백준/Java]Q1065  (0) 2021.07.08
[백준/Java]Q4344  (0) 2021.07.08
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.