Backend
home
👥

[백준] 그룹 단어 체커

생성일
2025/01/31 03:04
태그
BaekJoon
게시일
2025/01/31
최종 편집 일시
2025/02/01 07:45

문제

해결 방안 고민

문자열의 문자가 연속되지 않아야 하며 이미 앞에서 해당 문자가 입력된 경우 그룹 단어가 아니다.
그룹 단어의 개수를 출력해야 한다.
main 함수와 그룹 단어를 체크하는 함수를 만들어서 문제를 해결하기로 한다.

해결 방법

그룹 단어 체크 함수
boolean check() { // 26개의 단어를 체크할 길이의 26 길이의 boolean 배열 선언 boolean[] check = new Boolean[26]; // 알고리즘에서 중요하게 작용할 prev 변수 선언 (이전 문자와 현재 문자 확인) int prev = 0; String str = input(); }
Java
복사
prev 의 문자와 해당 문자가 같다면?
해당 문자가 중복된 문자인지 여부를 검사하지 않는다.
prev 의 문자와 해당 문자가 다르다면?
해당 문자가 중복된 문자인지 여부를 검사한다.
boolean check() { // 26개의 단어를 체크할 길이의 26 길이의 boolean 배열 선언 boolean[] check = new Boolean[26]; // 알고리즘에서 중요하게 작용할 prev 변수 선언 (이전 문자와 현재 문자 확인) int prev = 0; String str = input(); // 입력받은 문자열을 하나씩 꺼내서 그룹 단어인지 아닌지를 검사해야 함 for (int i = 0; i < str.length; i++) { int now = str.charAt(i) // i 번째 문자 저장 if (prev != now) { // 해당 문자가 처음 나오는 경우 (false 인 경우) if (!check[now - 'a']) { check[now - 'a'] = true; } else {// 해당 문자가 이미 나온 적이 있는 경우 (그룹단어가 아님) return false; // 함수 종료 } } else { // 연속된 문자인 경우 그냥 continue continue; } } return true; }
Java
복사
main 함수
main 에서는 먼저 그룹단어 개수를 셀 answer 변수를 생성한다.
N번 반복해야 하므로 for 문을 활용하며 check 메소드 호출 시 true 인 경우 answer를 1 증가 시킨다.
main() { for (int i = 0; i < N; i++) { if (check() == true) { answer++; } } print(answer); }
Java
복사

코드

전역적으로 BufferedReader를 활용하기 위해 static으로 선언하여 진행
public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { // 단어의 개수 입력 int N = Integer.parseInt(br.readLine()); // 단어의 개수 출력 int answer = 0; // 문자열 입력 for (int i = 0; i < N; i++) { if (check()) { answer++; } } System.out.print(answer); } // 체크 함수 만들기 public static boolean check() throws IOException { boolean[] check = new boolean[26]; int prev = 0; // 이전 문자 확인 위해 prev 변수 활용 String str = br.readLine(); for (int i = 0; i < str.length(); i++) { int now = str.charAt(i); // i 번째 문자 저장 (현재 문자) // 앞선 문자와 i 번째 문자가 같지 않을 경우 if (prev != now) { // 해당 문자가 처음 나오는 경우 if (!check[now - 'a']) { check[now - 'a'] = true; prev = now; // 다음 문자 확인을 위해 prev = now } else { return false; } } else { // 앞선 문자와 i 번째 문자가 같은 경우 (연속된 문자) continue; } } return true; } }
Java
복사