on
[알고리즘] K번째 큰 수
[알고리즘] K번째 큰 수
설명
현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다.
현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다.
기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값은 22입니다.
입력
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력된다.
출력
첫 줄에 K번째 수를 출력합니다. K번째 수가 존재하지 않으면 -1를 출력합니다.
예시 입력 1 10 3 13 15 34 23 45 65 33 11 26 42 예시 출력 1 143
풀이
처음엔 문제를 세장을 뽑는게 아니라 N장의 카드들중에 k번째 수를 구하는줄알고 다 했는데 알고보니깐 세개를 뽑고 그합한 값의 기록들중에서의 k번째수였다... 그래서 그거도 다 구했는데?? 채점사이트 오류때문에 컴파일에러나서 난 채점사이트 오류인지도 모르고 뭐가 잘못됐나 삽질만 계속했다;; 내 시간 돌려줘 왜 채점사이트 오류인지는 코드를 보자
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class kthLargestNum { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); int[] arr = new int[n]; HashMap map = new HashMap(); for(int i = 0; i < n; i++){ arr[i] = Integer.parseInt(st.nextToken()); } for(int i = 0; i < n; i++){ for(int j = i+1; j < n; j++){ for(int p = j+1; p < n; p++){ int key = arr[i] + arr[j] + arr[p]; map.put(key, key); } } } List answer = new ArrayList<>(map.values()); Collections.sort(answer); Collections.reverse(answer); if(k <= map.size()){ System.out.println(answer.get(k-1)); }else{ System.out.println(-1); } //System.out.println(k <= map.size() ? answer.get(k-1): -1); //여기 if문과 주석처리한 프린트문은 분명 똑같이 동작하는 코드인데 //채점사이트에서는 이부분처럼 하면 컴파일에러가 난다 진짜 뭔지 모르겠다 } }
이러한 에러가 났다 그래서? 구글링 해봤는데 채점오류가 아니었다 뭐 println이 모호하다는데 나랑 같은 고충을 겪은사람이 있었다
여기를 보면 컴파일러가 뭘 컴파일할지 결정하기 모호하다 이런식으로 나와있다
System.out.println(k <= map.size() ? (Integer)answer.get(k-1): -1); 로 바꾸니 해결되었다... 앞으로는 함부로 채점사이트 의심하지 말아야지
from http://til-blog.tistory.com/31 by ccl(A) rewrite - 2021-12-28 03:28:04