이코테 정렬된 배열에서 특정 수의 개수 구하기
업데이트:
카드정렬
처음에 List로 받아 indexOf, lastIndexOf로 구현했다.
찾아보니 시간 복잡도가 O(N) 이라 다시 구현함
컬렉션 프레임웍에서 지원하는 메서드라 빠를줄 알았더니 그냥 앞에서 뒤에서 순서대로 비교한다.
아래 구현은 살짝 컨닝함..
왼쪽은 같거나 작을때 end를 옮기가 아닐때는 start를 옮겨 첫번째 위치를 찾음
오른쪽은 작을때 end를 옮기고 아닐때는 start를 옮겨서 오른쪽 하나 뒤를 찾음
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i = 0; i < N; i++){
pq.offer(sc.nextInt());
}
int result = 0;
while(!pq.isEmpty()) {
int first = pq.poll();
if(pq.isEmpty()) {
break;
}
int second = pq.poll();
result += first + second;
pq.offer(first + second);
}
System.out.println(result);
}
}
댓글남기기