
해당 문제는 2년전에 푼 문제이기도 하고 쉽게 구현할 수 있는 문제였다.
먼저 나의 큰틀을 주석으로 정리해보았다.
/*
* Boolean을 사용, 총 26개의 int형 배열을 선언
* 각각의 아스키코드를 사용하여 배열 위치를 지정
* 한 번 사용된 문자는 false -> true로 변경
* 만약 i - 1이 같은 문자 && 해당 배열이 true이면? -> 넘어감
* 만약 i - 1이 같은 문자가 아니며, && 해당 배열이 true이면? -> break
*
* i - 1의 값을 사용하니깐, StirngIndex에러가 안뜨게 조심!
* */
해당 시간과 메모리는 충분하다고 판단해 구현에 제약이 있진 않았다.
그리고 나는 Boolean을 사용하여 문제를 풀었다.
Boolean을 사용한 이유는 추후 연속되지 않는 중복된 문자를 판단하기 위함이다!
최종코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int count = n;
for (int i = 0; i < n; i++) {
Boolean[] barr = new Boolean[26];
Arrays.fill(barr, Boolean.FALSE);
String str = br.readLine();
for (int j = 0; j < str.length() - 1; j++) {
barr[str.charAt(j)-97] = true;
if (str.charAt(j) == str.charAt(j+1) && barr[str.charAt(j+1)-97] == true)
continue;
if (str.charAt(j) != str.charAt(j+1) && barr[str.charAt(j+1)-97] == true) {
count--;
break;
}
}
}
System.out.println(count);
}
}

배운점
점점 문자열과 문법에 대해 이해가 되는 느낌이 든다. 차근차근 단계별로 풀어보고, 새로운 문법을 배우면 좋을 거 같다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 2738 - 행렬 덧셈 (0) | 2024.11.27 |
---|---|
[백준 JAVA] 25206 - 너의 평점은 (0) | 2024.11.26 |
[백준 JAVA] 2941 - 크로아티아 알파벳 (0) | 2024.11.25 |
[백준 JAVA] 2444 - 별 찍기 - 7 (0) | 2024.11.25 |
[백준 JAVA] 1157 - 단어공부 (0) | 2024.11.25 |