jeongwon
[백준 JAVA] 1316번 - 그룹 단어 체커 본문
문제:
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 변수 등.. )
그런대로 드디어 풀었다. 잘 안 풀릴 때는 이렇게 묵혀 두었다가 풀어보는 방식도 괜찮은 듯하다.
'오늘의 문제' 카테고리의 다른 글
| [백준 JAVA] 2292번 - 벌집 (0) | 2022.06.19 |
|---|---|
| [백준 JAVA] 1712번 - 손익분기점 (0) | 2022.06.17 |
| [백준 JAVA] 2941번 - 크로아티아 알파벳 (0) | 2022.06.09 |
| [백준 JAVA] 5622번 - 다이얼 (0) | 2022.06.08 |
| [백준 JAVA] 2908번 - 상수 (0) | 2022.06.08 |