728x90
문제
https://www.acmicpc.net/problem/1316
주어진 단어가 '그룹 단어'인지 확인하는 문제로, 그룹 단어란 각 문자가 연속해서 나타나는 단어를 말합니다. 예를 들어, "happy", "new", "year"는 그룹 단어지만, "aba", "abcabc"는 그룹 단어가 아닙니다.
접근 방법
각 단어를 순회하면서 그룹 단어인지 확인, 그룹 단어인지 확인하기 위해서는 이전에 등장했던 문자가 다시 나오지 않는지 체크하면 된다.
풀이 과정
- 각 단어를 순회하면서 문자가 연속적으로 등장하는지 확인합니다.
- 이전 문자를 기록하고, 현재 문자가 이전 문자와 다를 때, 이전에도 등장했던 문자라면 그룹 단어가 아닙니다.
- 문자의 등장 여부를 기록하기 위해 boolean 배열을 사용합니다. 이 배열은 각 문자의 출현 여부를 저장합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 단어의 개수 입력
int count = 0; // 그룹 단어의 개수를 셀 변수
for (int i = 0; i < n; i++) {
String word = br.readLine(); // 단어 입력
if (isGroupWord(word)) {
count++; // 그룹 단어이면 count 증가
}
}
System.out.println(count); // 결과 출력
}
// 그룹 단어인지 판별하는 메소드
public static boolean isGroupWord(String word) {
boolean[] seen = new boolean[26]; // 각 문자의 출현 여부를 기록할 배열
char prev = '\0'; // 이전 문자를 저장할 변수 (초기값은 null character)
for (int i = 0; i < word.length(); i++) {
char current = word.charAt(i); // 현재 문자
// 이전 문자와 현재 문자가 다르고, 현재 문자가 이미 나온 적이 있다면 그룹 단어가 아님
if (current != prev) {
if (seen[current - 'a']) {
return false;
}
seen[current - 'a'] = true; // 현재 문자 출현 기록
prev = current; // 이전 문자를 갱신
}
}
return true; // 모든 조건을 통과하면 그룹 단어
}
}
메모리:14140kb 시간:100ms
728x90
'IT 개발 관련 > [Algorithm]' 카테고리의 다른 글
[백준] 24262번: 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2024.08.31 |
---|---|
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 - Java (0) | 2024.08.30 |
[백준] 10988번: 팰린드롬인지 확인하기 - Java (1) | 2024.08.28 |
[백준] 2346번: 풍선 터뜨리기 - Java (0) | 2024.08.27 |
[백준] 18770번: 좌표 압축 - Java (0) | 2024.08.26 |