블라 블라 블라~~
처음은 테스트케이스를 입력한다. 2를 입력하면 문자열을 두 번 입력하는 것. 한 줄에 하나씩
그것을 한 단어로 본다. 이 단어의 문자가 연속되어서 나타나면 그룹단어로 본다.
즉 aaa도 그룹단어 aabb도 ab도 그룹단어지만 aba 이것은 그룹 단어가 아니다.
같은 문자가 전부 붙어 있지 않고 사이에 다른 문자가 끼게 되면 그룹 단어가 아니게 된다.
코드는 아래에 있다.
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
32
|
import java.util.Scanner;
//baekjoon_1316_그룹 단어 체커
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int test = sc.nextInt();
int result=0;
for(int i=0; i<test; i++) {
String str = sc.next();
if(wordcheck(str))
result++;
}
System.out.println(result);
}
public static boolean wordcheck(String word) {
boolean check[] = new boolean[26];
int len = word.length();
for(int i=0; i<len; i++) {
char tmp = word.charAt(i);
if(check[tmp-'a']) //이미 체크한 알파벳
return false;
else {
if(i<len-1 && tmp != word.charAt(i+1))
check[tmp-'a'] = true;
}
}
return true;
}
}
|
cs |
line 7 : 테스트케이스 몇개의 문자열을 입력할 지 입력받는다.
line 8 : result 변수는 출력할 결과값이다.
line 9 : 입력받은 test 값만큼 반복해서 문자열을 입력하고 검사한다.
line 10 : 문자열 입력
line 11 : 입력받은 문자열을 검사하고 그것이 참이면(그룹 단어이면) 12행에서 result를 증가시킨다.
line 17 : return 타입이 bool값인 함수 wordcheck()함수를 정의한다. 문자열을 매개변수로 받는다.
line 18 : 알파벳은 26개 이므로 bool로 된 배열을 26크기로 잡는다.
line 19 : 문자열의 요소 전부를 검사하기 위해 문자열의 길이를 len에 저장한다.
line 21 : len길이만큼 반복 검사
line 22 : charAt(i)로 문자열의 문자를 앞에서 부터 하나씩 꺼내서 tmp에 저장한다.
line 23 : check[tmp - 'a']이 배열 위치는 알파벳의 포지션을 뜻한다. tmp가 알파벳 a 라면 -'a'를 하여 check[0]에 접근한다. tmp가 b라면 check[1]이 true인지 검사한다. 만약 여기서 true값을 만나면 false를 리턴한다.
line 26 : 앞에 if문에 걸치치 않고 여기로 온 것은 체크를 안 한 문자다.
if(i<len-1 && tmp != word.charAt(i+1)
아주 간단한 조건문이다. && 이 앤드연산자 양 옆이 만족해야 참이 되어 if문 안으로 들어간다.
오른쪽먼저 보자면 word.charAt(i+1) 위에 if 문에서 검사한 문자(tmp)와 다르면 연속된 문자와 다른 문자가 온 것을 확인하고 check[tmp - 'a'] 자리를 true값으로 바꾼다.
다음에 또 이 문자를 검사하면 즉 abba 이렇게 다시 나오게 되면 그룹 문자가 아니게 된 걸로 확인되어 23행에서 false로 리턴한다.
26행에 if문에 왼쪽에서 (i<len-1) 은 word에서 charAt()로 접근할 수 있는 index는 0~len-1이다.
즉 charAt(len-1)까지 접근 가능하지만 i를 그보다 1아래까지만 접근하게 하는 것이다.
i를 len-1까지 가게 하면 우측에서 charAt(i+1)에서 charAt(len)이 되어 배열 인덱스 뭐시기 오류가 뜨게 된다.
뭐 아무튼... 그렇게 for문 돌고 true를 리턴하면 result를 증가시킨다.
와 이게 진짜 어려운 내용도 아닌데 이게 참 아아주 쉽게 표현하려 작성하단다고 생각하고 자세하고 쉽게 이해할 수 있게 한건데도 오히려 복잡하고 어려워 보인다.
어후... 몰라 어려워.
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 2839번 java 자바 설탕배달 (수학 1) (0) | 2020.10.17 |
---|---|
백준 1712번 java 자바 손익분기점 (수학 1) (0) | 2020.10.17 |
백준 2941번 자바 java 크로아티아 알파벳 [문자열] (0) | 2020.09.29 |
백준 5622번 자바 Java 다이얼 (문자열) (0) | 2020.09.29 |
백준 2908번 java 자바 상수 (문자열) (0) | 2020.09.27 |
댓글