https://www.acmicpc.net/problem/1316
public class Main {
private static boolean isGroup(String word) {
boolean[] alphabet = new boolean[26]; //알파벳은 26개
boolean result = true;
char prev = ' ';
for(int i=0; i<word.length(); i++) {
char now = word.charAt(i);
boolean isEqualsPrev = (prev == now) ? true : false;
boolean isDistinct = alphabet[now - 'a'];
if(isDistinct && !isEqualsPrev) { //중복존재 그리고 이전값과 다름
result = false;
break;
}
alphabet[now - 'a'] = true; //중복임을 표시
prev = now; //이전값 저장
}
return result;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int wordCount = Integer.valueOf(sc.nextLine());
long count = IntStream.range(0, wordCount)
.mapToObj(i -> sc.nextLine())
.filter(Main::isGroup).count();
System.out.println(count);
}
}
내가 풀었지만 너무 오래 걸려서 잊지 않기 위해 포스팅한다.
이전에 익혔던 배열을 활용한 체크를 사용한다. 알파벳의 갯수만큼 배열을 만들어 중복체크를 할수 있게 만들었다.
그룹단어를 체크하는 함수는 실패조건을 달성하면 빠져나가는 식으로 만들었다. 사실 실무에서도 저런 식의 코드를 많이 사용했는데 막상 PS에선 활용한다는 생각을 추호도 하지 못해 해맸다.
특히 연속하지 않는 조건을 생각하기가 힘들었다. 그냥 단순 이전값이랑 비교만 해주면 되는건데 이게 왜 생각이 안났는지...암튼 이전 값을 기억하는 prev 변수 사용은 사용 전에 indexOutOfBounds가 나진 않는지 체크하고 initValue를 잘 고려해서 사용해야함을 주의하자.
'Java > Problem Solving' 카테고리의 다른 글
BOJ 4673번 - 셀프넘버 (0) | 2022.06.14 |
---|---|
BOJ 2577번 - 숫자의 개수 (0) | 2022.06.12 |
BOJ 1110번 - 더하기 사이클 (0) | 2022.06.12 |