1920번 수 찾기
첫째줄 n입력
둘째줄 n갯수 입력
셋째줄 m입력
넷째줄 m갯수 입력
m이 n에 있는지 탐색 후 1(true) 0(false)출력
일단 그냥 구현했을 때 실패했음 원인은 시간초과
알고리즘쪽 보니까 이분탐색하는 부분이 있더라...
이분탐색 구현해보고있는데 배열로 탐색하는 버전은 너무 어색하더라...
내일 for문으로 다시 구현해봐야할듯
for문 통해서 이분탐색 했는데 nextint로는 속도가 안나옴. 또 첫 구현에서는 탐색하는 수들도 전부 배열로 넣어서그런지
시간이 압도적으로 부족한 느낌이 들었음...
때문에 결국 bufferedReader, StringTokenizer를 사용해서 입출력속도를 많이 올렸다.
이제부턴 무조건 써야하나... 타입에 익숙해져야할듯
실버 4 문제인데 이틀을 썼다... 그래도 풀었을 때 상당히 기뻤음.
시간초과 -> 출력초과 -> 틀렸습니다 무한반복... 이분탐색 구현에 자꾸 빼먹는게 생겨서 그런가 참 힘들었다...
반례찾는것도 어렵고... 본인이 반례를 생각하려 노력해야하는데 쉽지않음
탐색이 주 문제니까 sort는 그냥 array.sort를 사용했고, 탐색을 직접 구현해봤다. 이분탐색 어려워징징징
--------
hint
이분탐색을 잘 구현해내면 된다.
내가 헷갈린 부분은 시간이 중요하니까
처음엔 배열 두개를 만들었는데
두개 만들 필요가 없는 걸 잘 생각해서 하면 될듯
--------
solution
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); long[] a = new long[n]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i = 0; i < n; i++) { a[i] = Integer.parseInt(st.nextToken()); } Arrays.sort(a); int m = Integer.parseInt(br.readLine()); st = new StringTokenizer(br.readLine()); int left; int right; int center; long key = 0; int isTrue = 0; for(int i = 0; i < m; i++) { key = Integer.parseInt(st.nextToken()); left = 0; right = a.length - 1; center = right / 2; isTrue = 0; while(left <= right) { if(a[center] == key) { System.out.println("1"); isTrue = 1; break; } else if(a[center] > key) { right = center - 1; center = (left + right) / 2; } else if(a[center] <key) { left = center + 1; center = (left + right) / 2; } } if(isTrue == 0) { System.out.println("0"); } } } } | cs |
실행시간 - 1272ms (이거맞냐....) 자바라 봐준거같은데 sort 직접 구현했으면 시간초과 걸렸을듯
약 2일 소요.... ㅜㅜㅜㅜ 실버가 이런데 더 올라갈 수 있을까...
'공부 > Algorithm' 카테고리의 다른 글
백준 2164번 카드2 자바로 풀어 본 짧은 글 (0) | 2023.03.18 |
---|---|
24060번 알고리즘 수업 - 병합 정렬 1 자바로 풀어 본 짧은 글 (0) | 2023.02.04 |
1427번 소트인사이드 자바로 풀어 본 짧은 글 (1) | 2023.01.08 |
백준 2563번 색종이 자바로 풀어 본 짧은 글 (0) | 2023.01.05 |
백준 17478번 재귀함수가 뭔가요? 자바로 풀어 본 짧은 글 (0) | 2022.12.29 |