마이의 개발 블로그

[구름LEVEL] 해외 주식 투자 (Java) 본문

코딩테스트/구름LEVEL

[구름LEVEL] 해외 주식 투자 (Java)

개발자마이 2023. 9. 9. 02:49
반응형
 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io

접근 방식

1) 주어진 주식 종목의 평가 금액을 산출한 후에 2) 평가 금액이 높은 순, 주식 번호가 낮은 순으로 판매할 주식의 번호를 순서대로 출력해야하는 문제이다. 주식 번호는 주식이 제시되는 순서와 동일하다.

로직 설명

- n에 주식 개수 저장

- 가격, 주식번호 저장용 배열 double[n][2] 선언

- n만큼 반복하며: 한 줄씩 읽어 가격(price)과 주식번호(i + 1)를 저장

- Arrays.sort() 메서드에 Comparator를 재정의하여 주식 가격 기준 내림차순, 주식 번호 기준 오름차순 정렬

- 정렬된 배열을 탐색하며: 순차적으로 번호와 공백 StringBuffer에 쓰기

- 마지막 공백 제거(trim()) 후 StringBuffer 출력

작성 코드

import java.io.*;
import java.util.stream.Stream;
import java.util.*;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		double[][] arr = new double[n][2]; 
		
		for(int i = 0; i < n; i++){
			double[] stock = Stream.of(br.readLine().split(" ")).mapToDouble(Double::parseDouble).toArray();
			double price = Math.floor(stock[0] * stock[1] * 10) /10.0;	
			arr[i][0] = price;
			arr[i][1] = i + 1;
		}
		
		Arrays.sort(arr, new Comparator<double[]>(){
			public int compare(double[] stock1, double[] stock2){
				if(stock1[0] == stock2[0]){
					return (int)(stock1[1] - stock2[1]);
				}else{
					return (int)((stock2[0] - stock1[0]) * 100);
				}
			}
		});
		
		StringBuffer sb = new StringBuffer();
		
		for(double[] stock : arr){
			sb.append((int)stock[1] + " ");
		}
		
		System.out.print(sb.toString().trim());
	}
}
반응형

'코딩테스트 > 구름LEVEL' 카테고리의 다른 글

[구름LEVEL] 방 탈출하기 (Java)  (0) 2023.09.18
[구름LEVEL] 개미 집합의 지름 (Java)  (0) 2023.09.09
Comments