Algorithm/프로그래머스
[프로그래머스] 숫자 짝꿍 (Java)
Carroti
2022. 11. 1. 09:50
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
우선순위 큐
풀이
X,Y의 최대 길이가 3,000,000 이기 때문에
2중 포문을 이용해 완전탐색으로 짝꿍을 찾으면 3,000,0002 의 연산으로 시간 초과가 발생한다.
따라서 X에서 각 수의 등장횟수를 세고, Y에도 각 수가 등장하면 우선순위 큐에 삽입한다.
이때도, 짝꿍이 최대 3,000,000개가 될 수 있으므로 O(n2)의 시간복잡도를 갖는 Array.sort()를 이용하면 시간초과가 나기 때문에
ArrayList에 담은 후 정렬을 진행하거나 우선순위 큐를 이용해 O(nlogn)의 시간복잡도로 해결한다.
코드
import java.util.*;
class Solution {
public String solution(String X, String Y) {
int[] count = new int[10];
PriorityQueue<Character> pq = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < X.length(); i++)
count[X.charAt(i) - '0']++;
for (int i = 0; i < Y.length(); i++) {
if (count[Y.charAt(i) - '0']-- > 0)
pq.add(Y.charAt(i));
}
if (pq.isEmpty()) return "-1";
if (pq.peek() == '0') return "0";
StringBuilder sb = new StringBuilder();
while (!pq.isEmpty())
sb.append(pq.poll());
return sb.toString();
}
}