Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

jeongwon

[백준 JAVA] 1316번 - 그룹 단어 체커 본문

오늘의 문제

[백준 JAVA] 1316번 - 그룹 단어 체커

jeongwon_ 2022. 6. 16. 15:13

문제: 

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

약식 순서도:

1) 테스트케이스 개수를 입력 받아, 그 수만큼 문자열을 입력 받고, 체커 메소드를 호출한다. (BufferedReader, int testcase, String s, check())

2) 체커 메소드는 boolean 타입을 반환하며, 반환값이 true인 경우 카운트 한다. (int count)

--- check() 메소드 ---

(1) String s 를 매개변수로 전달 받는다. (public static boolean)

(2) boolean 배열을 알파벳 개수 크기로 생성, 문자열의 전후 문자를 비교할 char 변수 2개를 생성한다. (boolean[] alpha, char prev / char now)

(3) prev 변수에 문자열의 첫 번째 문자를, now변수에 현재 문자를 저장한다. (String.charAt())

(4) 문자열의 전후 값인 prev와 now의 값이 다른 경우, 현재 값을 prev에 저장하고 alpha[]의 now 알파벳 순서(index)에 해당하는 값을 true로 변경한다. (boolean의 초기값은 false 이다.)

(5) 단, 먼저 alpha[]의 해당 알파벳 순서(index)에 해당하는 값이 true인지 확인한다. true면 해당 문자가 문자열에 이미 존재한다는 의미이므로 메소드를 종료하고 false를 반환한다. 

(6) 아닌 경우 true를 반환하고 메소드가 종료된다. 

 

답안:

package practice;

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 testcase = Integer.parseInt(br.readLine()); // 1)
		int count=0;

		for(int i=0; i<testcase; i++) {
			String s=br.readLine();
			if(check(s))
				count++;
		}
		System.out.println(count);
	}

	public static boolean check(String s) { //2)

		boolean[] alpha = new boolean[26];

		char prev=s.charAt(0);

		for(int j=0; j<s.length(); j++) {

			char now=s.charAt(j);
			
			if(prev!=now) {
				if(alpha[now-'a']) return false; //(5)
				else {
					alpha[prev-'a']=true; //(4)
					prev=now;
				}
			}	
		}			
		return true;
	}
}

 

 도움받은 곳: https://st-lab.tistory.com/69

 

st-lab 님의 답안을 보고 며칠 묵혀둔 후에 다시 풀었더니 몇몇 방식의 차이가 있었지만( int 변수 >char 변수  등.. )

그런대로 드디어 풀었다. 잘 안 풀릴 때는 이렇게 묵혀 두었다가 풀어보는 방식도 괜찮은 듯하다.