https://www.acmicpc.net/problem/1316
분류 : 단계별 문제 - 문자열
소요 시간 : 1시간 30분
실행 코드 :
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Set<Character> checker;
List<Character> groupedArr;
int countAnswer = 0; //그룹 함수 개수 카운트
int arrayNum = Integer.parseInt(br.readLine());
for(int i=0; i<arrayNum; i++) {
char[] arr = null;
arr = br.readLine().toCharArray();
checker = new HashSet<Character>();
groupedArr = new ArrayList<Character>();
for(int j=0; j<arr.length-1; j++) {
if(j ==0){
groupedArr.add(arr[0]);
checker.add(arr[0]);
}
if(arr[j] != arr[j+1]) {
groupedArr.add(arr[j+1]);
checker.add(arr[j+1]);
}
}
if(groupedArr.size() == checker.size()){
countAnswer++;
}
}
System.out.println(countAnswer);
}
}
풀이 과정 :
우선, 입력받은 단어를 toCharArray()를 활용하여 배열에 저장했다.
그 다음, 인덱스 값으로 배열 내부에 인접한 두 값을 차례로 비교해서 비교한 두 값이 다를때마다 뒤에 있는 값을 두 개의 자료구조(HashSet, List)에 저장했다. 맨 앞에 값(arr[0])은 무조건 저장되야하므로, 지정해서 대입했다.
ex) "happy"를 입력 => 'h', 'a', 'p', 'y' 가 자료구조에 저장 (숫자가 연속된 경우 하나씩만 저장)
HashSet은 중복 값을 허용하지 않기때문에 HashSet과 List의 size를 비교해서 값이 같다면 그룹단어이다.
ex) "aabbaa"라는 단어를 입력 => List : 'a', 'b', 'a' 저장, HashSet : 'a', 'b' 저장 => size 각각 3, 2
"aabbcc"(그룹단어)를 입력 => HashSet, List : 모두 'a', 'b', 'c' 저장 => size가 각각 3, 3
값이 같을때마다 countAnswer의 값을 1씩 증가시켜서 그룹단어의 개수를 카운트했다.
초보입니다. 자잘한 지적해주시면 언제나 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 1929번 - 소수 구하기 (Java 8) (0) | 2022.02.24 |
---|---|
백준 4948번 - 베르트랑 공준 (Java 8) (0) | 2022.02.24 |
백준 9020번 - 골드바흐의 추측 (Java 8) (0) | 2022.02.24 |
백준 2675번 - 문자열 반복 (Java 8) (0) | 2021.11.06 |
백준 1065번 - 한수 (Java8) (0) | 2021.09.18 |
댓글