while(1) work();
반응형

1. 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXTC4piqD_IDFASe  

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

2.  

3. 분류

우선순위 큐

4.  

5. 개인적 난이도

매우 쉬움 쉬움 보통 어려움 매우 어려움

6.  

7. 핵심 알고리즘

거꾸로 계산하면 편하다.

X = 0에서 시작하지 말고 X = K에서 시작해서

나누기를 해가며 계산한다.

8.  

9. 시행착오

없음

10.  

11. 코드

<java />
import java.util.*; import java.io.*; class Solution{ public static void main(String args[]) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int tc = 1; tc <= T; ++tc){ int N = Integer.parseInt(br.readLine()); int[] A = new int[N]; String[] arr = br.readLine().split(" "); int K = Integer.parseInt(br.readLine()); int min = Integer.MAX_VALUE; for (int i = 0; i < N; i++){ A[i] = Integer.parseInt(arr[i]); min = Math.min(A[i], min); } Queue<Node> pq = new PriorityQueue<Node>(); pq.add(new Node(K, 0)); int cnt = K; while(!pq.isEmpty()){ Node n = pq.poll(); if (n.left == 0){ cnt = n.cnt; break; } pq.add(new Node(0, n.cnt + n.left)); for (int i = 0; i < N; i++){ pq.add(new Node( n.left / A[i], n.cnt + n.left % A[i] )); } } System.out.println("#" + tc + " " + cnt); } } static class Node implements Comparable<Node>{ int left, cnt; public Node(int left, int cnt){ this.left = left; this.cnt = cnt; } public int compareTo(Node n){ if (this.cnt > n.cnt) return 1; if (this.cnt == n.cnt) return 0; return -1; } } }
반응형

'알고리즘 > SW Expert Academy' 카테고리의 다른 글

[SW 역량테스트 기출] 13469. 메모장 프로그램  (0) 2022.02.27
2948. 문자열 교집합  (0) 2022.02.16
3000. 중간값 구하기  (0) 2022.02.16
1249. 보급로  (0) 2022.02.16
1248. 공통조상  (0) 2022.02.16
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그