21.05.29 기록
-
백준 알고리즘 1316 풀이 완료
-
- 내가 푼 1316 풀이 (통과하지 못한 틀린 코드이다.)
- 테스트 케이스의 결과는 잘 나왔지만 백준에서는 틀린 코드였다.
- 내가 푼 1316 풀이 (통과하지 못한 틀린 코드이다.)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class B1316 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int testCase = Integer.parseInt(br.readLine()); int cnt = 0; for(int i = 0; i < testCase; i++) { String s = br.readLine(); char[] sArr = new char[100]; int index = 0; for(int j = 0; j < s.length()-1; j++) { if(s.charAt(j) != s.charAt(j+1)) { sArr[index] = s.charAt(j); if (j == s.length() - 2) { sArr[++index] = s.charAt(j+1); break; } index++; } } boolean isGroup = true; for(int j = 0; j < sArr.length; j++) { if(sArr[j] <= 0) { break; } for(int k = j+1; k < sArr.length; k++) { if(sArr[k] <= 0) { break; } if (sArr[j] == sArr[k]) { isGroup = false; break; } } } if(isGroup) { cnt++; } } System.out.println(cnt); } }-
- 해설 풀이 (메모리 14.3MB, 시간 136ms로 통과)
- 풀이에 한계를 느끼고 해설을 찾아보았다.
- boolean 배열로 check 하는 로직을 구현하고 이를 함수로 사용한 풀이이다.
- 해설 풀이 (메모리 14.3MB, 시간 136ms로 통과)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class B1316 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int testCase = Integer.parseInt(br.readLine()); int cnt = 0; for(int i = 0; i < testCase; i++) { if( isGroup(br.readLine()) ) { cnt++; } } System.out.println(cnt); } public static boolean isGroup(String s) { boolean[] chk = new boolean[26]; int prev = 0; for(int i = 0; i < s.length(); i++) { int now = s.charAt(i); if(prev != now) { if(chk[now - 'a'] == false) { chk[now - 'a'] = true; prev = now; } else return false; } } return true; } }- 현재의 문자(now)가 이전 문자(prev)와 같지 않을 때 처음 나온 문자라면 boolean 배열의 해당 알파벳 인덱스를 true로 체크해준다.
반대로 중복으로 나온 문자라면(boolean 배열에서 이미 true 값을 가짐) false를 return하고 함수를 종료한다.
-