BAEKJOON 1316번 그룹단어📚

yeonjae·2020년 10월 4일
0

알고리즘

목록 보기
2/5

알고리즘 1주차 3문제중 세번째 문제!!

📚 백준사이트의 1316번 문제 (그룹단어) 📚

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

예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹
단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

이러한 문제 였다. 나의 풀이방법은 이러하다.

package algorithmus.quiz.one;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Baekjoon1316 {
	public static void main(String[] args) {
		// 백준문제 1316번
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자 입력");
		// 숫자 입력받기
		int a = sc.nextInt();
		// a개수 만큼의 배열 생성
		String str[] = new String[a];
		// 그룹단어를 세는 개수 count 선언
		int count = 0;
		// a의 숫자만큼 반복
		for (int i = 0; i < a; i++) {
			// 영단어 입력받기
			str[i] = sc.next();
			// 입력한 영단어의 알파벳 수만큼 검사반복
			List<Character> list = new ArrayList<Character>();
			for (int j = 0; j < str[i].length(); j++) {
				// 빈 배열 생성
				if (j != 0) {
					if (str[i].charAt(j) != str[i].charAt(j - 1)) { // -1번째 글자와 일치하지 않을 경우
						for (int k = 0; k < list.size(); k++) {
							// 전의 글자와 다를 경우 --> 그 다음 검사 --> List에 추가되어있는 char들과 비교 있으면 false반환 / 없으면 List에 추가
							// 배열에 들어있는 단어인지 확인
							if (!list.contains(str[i].charAt(j))) { // 저장된 List 중에 일치하는 알파벳이 List에 추가
								list.add(str[i].charAt(j));
							}
						}
					} else {
						list.add(str[i].charAt(j));
					}
				} else { // 검사하는 자리가 첫번째일 경우는 무조건 배열 첫번째에 저장
					list.add(str[i].charAt(0));
				}
			}
			System.out.println(list);
			if (list.size() == str[i].length()) {
				count++;
			}
		}
		System.out.println(count);
		sc.close();
	}
}
🎈 풀이 방식 설명
(1) 나는 영단어를 입력하면 charAt() 이용해 첫번째글자는 List에 무조건 저장
(2) 두번째 글자부터는 첫번째글자와 비교해 같으면 미리 생성해놓은 List에 저장
(3) 다를경우 저장된 list에 같은 알파벳이 있는지 contains()을 통해 비교하였고 없을경우 list에 추가했다. (있을경우는 추가 안함)
(4) 최종적으로 list.size()와 입력한 단어의 개수가 같을 경우 count 를 증가시켰고, 증가시킨 값을 찍었다.
내가 생각한 실행한 방법은 다른사람이 보기에 복잡하게 느껴질 수도 있다.
그래도 온전히 검색없이 나의 힘으로 푼 것이기 때문에 이 방법을 기록하려 한다.
복잡한 풀이방식이 끝났다. 다른사람들은 어떻게 해결했는지 참고하고 다른 방향으로도 생각해봐야 할 것 같다 👩🏻
profile
꿈꾸는개발자

0개의 댓글