-
반응형
https://www.acmicpc.net/problem/7795
7795번: 먹을 것인가 먹힐 것인가
심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을
www.acmicpc.net
풀이
B의 원소들을 정렬한 뒤, LowerBound를 통해 A의 각 원소보다 작은 B의 원소의 개수를 구해주는 방법을 선택함
시간 복잡도
정렬은 O(NLogN)
LowerBound는 O(LogN)이 되므로, 시간복잡도는 O(NLogN)이 된다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { //O(LogN) public static int lowerBound(int[] list, int target){ int left = 0; int right = list.length-1; while(left<=right){ int middle = (left+right)/2; if(list[middle]<target){ left++; } else{ right--; } } return left; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.valueOf(br.readLine()); for(int tt=0;tt<t;tt++){ StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.valueOf(st.nextToken()); int m = Integer.valueOf(st.nextToken()); int[] A = new int[n]; int[] B = new int[m]; //O(N) st = new StringTokenizer(br.readLine()); for(int i=0;i<n;i++){ A[i]=Integer.valueOf(st.nextToken()); } //O(M) st = new StringTokenizer(br.readLine()); for(int i=0;i<m;i++){ B[i]=Integer.valueOf(st.nextToken()); } //O(MLogM) Arrays.sort(B); int answer = 0; //O(N) for(int i=0;i<n;i++){ answer+=lowerBound(B,A[i]); } System.out.println(answer); } } }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준OJ] 13413번 오셀로 재배치 (0) 2022.12.05 [백준OJ] 1707번 이분 그래프 (2) 2022.12.05 [백준OJ] 5567번 결혼식 (0) 2021.12.26 [백준OJ] 11497번 통나무 건너뛰기 (0) 2021.12.24 [백준OJ] 2631번 줄세우기 (0) 2021.12.24 댓글