[Baekjoon] 1316번 문제풀이 - 그룹 체커
2020. 8. 7. 20:35ㆍComputer Sciences/Problem Solve
문제가 생각외로 까다로웠습니다. 쉽게 풀릴 것 같았는데 디버깅을 해보니 끝도 없는 오류... 나중에 자바와 알고리즘을 더 공부하고 나면 더 쉽게 풀 수 있을거라 생각합니다.
접근 방법을 설명하겠습니다. 먼저 입력받을 단어의 개수, 단어를 입력받습니다. 문자열이 한 글자일 경우 무조건 그룹 단어이므로 검사하지 않습니다. 그리고 단어의 연속되는 문자를 제거합니다. 이때 제거된 문자 자리에는 임의의 문자를 넣어 중복을 방지합니다. 연속되는 문자를 제거했으면 이제 문자의 중복을 검사합니다. 여기서 문자가 중복된다면 false, 중복되지 않는다면 true로 지정되는 flag를 지정합니다. 그리고 마지막으로 flag가 true라면 카운트를 증가시킵니다. 코드를 보겠습니다. 좀 복잡합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baekjoon1316 {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int taskCase = 0;
int cnt = 0;
String[] strArr = null;
char[] charArr = null;
try {
taskCase = Integer.parseInt(br.readLine());
strArr = new String[taskCase];
for (int i = 0; i < taskCase; i++) {
strArr[i] = br.readLine().toLowerCase();
}
} catch (IOException e) {
e.getStackTrace();
}
for (int i = 0; i < taskCase; i++) {
boolean flag = true;
if (strArr[i].length() == 1) { // 입력받은 문자가 한 글자라면 검사할 필요가 없음.
cnt++;
continue;
}
charArr = new char[strArr[i].length()];
for (int j = 0; j < strArr[i].length(); j++) { // 연속되는 문자 제거
if (j == strArr[i].length() - 1) { // 문자의 끝에 도달했을 때 마지막 문자 삽입. 아래 구문의 배열 범위 초과 오류 방지
charArr[j] = strArr[i].charAt(j);
break;
}
if (strArr[i].charAt(j) != strArr[i].charAt(j + 1))
charArr[j] = strArr[i].charAt(j);
else { // 공백 중복 방지로 임의의 값 지정
charArr[j] = (char) j;
}
}
for (int k = 0; k < charArr.length; k++) { // 문자 비교. 중복되는 값이 있을 시 false
for (int j = k + 1; j < charArr.length; j++) {
if (charArr[k] == charArr[j]) {
flag = false;
break;
}
}
}
if (flag == true)
cnt++;
}
System.out.println(cnt);
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Baekjoon] 2839번 문제풀이 - 설탕 배달 (0) | 2020.08.11 |
---|---|
[Baekjoon] 1717번 문제풀이 - 손익분기점 (0) | 2020.08.11 |
[Baekjoon] 2941번 문제풀이 - 크로아티아 알파벳 (0) | 2020.08.07 |
[Baekjoon] 5622번 문제풀이 - 다이얼 (0) | 2020.08.07 |
[Baekjoon] 2908번 문제풀이 (0) | 2020.08.05 |