๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 2217๋ฒˆ: ๋กœํ”„(๊ทธ๋ฆฌ๋””, ์ˆ˜ํ•™)

by ์ฃผ๋ฐœ2 2020. 2. 19.
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2217

 

2217๋ฒˆ: ๋กœํ”„

N(1≤N≤100,000)๊ฐœ์˜ ๋กœํ”„๊ฐ€ ์žˆ๋‹ค. ์ด ๋กœํ”„๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋Ÿฐ ์ €๋Ÿฐ ๋ฌผ์ฒด๋ฅผ ๋“ค์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋กœํ”„๋Š” ๊ทธ ๊ตต๊ธฐ๋‚˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌผ์ฒด์˜ ์ค‘๋Ÿ‰์ด ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋กœํ”„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ฐ๊ฐ์˜ ๋กœํ”„์— ๊ฑธ๋ฆฌ๋Š” ์ค‘๋Ÿ‰์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. k๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋Ÿ‰์ด w์ธ ๋ฌผ์ฒด๋ฅผ ๋“ค์–ด์˜ฌ๋ฆด ๋•Œ, ๊ฐ๊ฐ์˜ ๋กœํ”„์—๋Š” ๋ชจ๋‘ ๊ณ ๋ฅด๊ฒŒ w/k ๋งŒํผ์˜ ์ค‘๋Ÿ‰์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ฐ ๋กœํ”„๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ๋กœํ”„๋“ค์„

www.acmicpc.net

์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Collections;

public class Main {

	public static void main(String[] args) throws IOException {
		//Scanner scan = new Scanner(System.in);
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int N = Integer.parseInt(bf.readLine());
		Integer[] lope = new Integer[N];	// ๊ฐ ๋กœํ”„ ์ค‘๋Ÿ‰
		int maxWeight = 0;					// ์ตœ๋Œ€ ์ค‘๋Ÿ‰
		int num = 1;						// ๋กœํ”„ ๊ฐฏ์ˆ˜
		for(int i=0; i<lope.length; i++) 
			//lope[i] = scan.nextInt();
			lope[i] = Integer.parseInt(bf.readLine());
			
		
		// ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
		Arrays.sort(lope, Collections.reverseOrder());
		
		// 15*1 , 10*2, ... ๋น„๊ต
		for(int i=0; i<lope.length; i++) {
			maxWeight = Math.max(lope[i] * num, maxWeight);
			num ++;
		}
		
		bw.write(maxWeight + "\n");
		bw.flush();
		//System.out.println(maxWeight);
		//scan.close();
		bf.close();
	}

}

๋ฌธ์ œ์ดํ•ด

๋ฌธ์ œ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์„œ ๊ณ„์†๋ณด๊ณ , ๋ธ”๋กœ๊ทธ๋„ ์ฐพ์•„๋ดค๋‹ค.

๋ฌธ์ œ์—์„œ k๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋Ÿ‰์ด w์ธ ๋ฌผ์ฒด๋ฅผ ๋“ค์–ด์˜ฌ๋ฆด ๋•Œ, ๊ฐ๊ฐ์˜ ๋กœํ”„์—๋Š” ๋ชจ๋‘ ๊ณ ๋ฅด๊ฒŒ w/k๋งŒํผ ์ค‘๋Ÿ‰์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ณ  ํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ1์˜ ๊ฒฝ์šฐ, ์ตœ๋Œ€ ์ค‘๋Ÿ‰์„ ๋ณด๋ฉด

1๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์ตœ๋Œ€ ์ค‘๋Ÿ‰์ด ๋˜๋ ค๋ฉด ๋ฌด๊ฒŒ๊ฐ€ 15์ธ ๋กœํ”„ ํ•œ๊ฐœ๋งŒ ๋“ค์–ด์˜ฌ๋ฆด๋•Œ, ์ตœ๋Œ€ ์ค‘๋Ÿ‰์€ 15๊ฐ€ ๋œ๋‹ค.

2๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์ตœ๋Œ€ ์ค‘๋Ÿ‰์ด ๋˜๋ ค๋ฉด ๋ฌด๊ฒŒ๊ฐ€ ์ž‘์€ 10 * 2๊ฐ€ ๋‘๊ฐœ ๋“ค์–ด์˜ฌ๋ฆด๋•Œ, ์ตœ๋Œ€ ์ค‘๋Ÿ‰์€ 20์ด ๋œ๋‹ค.

 

๋งŒ์•ฝ ์ž…๋ ฅ์ด ์•„๋ž˜์™€ ๊ฐ™๋‹ค๋ฉด,

4

35 10 20 30 

์œ„ ์ค‘๋Ÿ‰์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

35 30 20 10

1๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์ตœ๋Œ€์ค‘๋Ÿ‰์€ 35

2๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์œ„ 35๋กœํ”„๋ž‘ ์ค‘๋Ÿ‰ 30 ๋กœํ”„๋ž‘ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์ตœ๋Œ€์ค‘๋Ÿ‰์€ 30 * 2 = 60์ด ๋œ๋‹ค.

3๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์œ„ 35, 30 ๋กœํ”„๋ž‘ 20๋กœํ”„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•ด์„œ 20 * 3 = 60์ด ๋œ๋‹ค.

4๊ฐœ์˜ ๋กœํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ -> ์œ„ 35, 30, 20 ๋กœํ”„๋ž‘ 10๋กœํ”„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•ด์„œ 10 * 4 = 40์ด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๋Œ€์ค‘๋Ÿ‰์€ 60์ด ๋œ๋‹ค.

 

ํ’€์ด

์œ„ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ, ๋กœํ”„๋ฅผ ๊บผ๋‚ด๋ฉด์„œ ๋ณ‘๋ ฌ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์ตœ๋Œ€ ์ค‘๋Ÿ‰์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

 

 

โ€ป ํ‰์†Œ์— Scanner ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅ์„ ๋ฐ›์•˜๋Š”๋ฐ, BufferedReader ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ๋ฐ›์œผ๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ์™€ ์†๋„๋ฉด์—์„œ ์—„์ฒญ ๊ฐ์†Œ๊ฐ€ ๋˜์—ˆ๋‹ค.

๊ฐ€์žฅ ์•„๋ž˜ - Scanner๋กœ ์ž…๋ ฅ๋ฐ›๊ธฐ.

์ค‘๊ฐ„ - BufferedReader๋กœ ์ž…๋ ฅ๋ฐ›๊ธฐ.

๊ฐ€์žฅ ์œ„ - BufferedReader๋กœ ์ž…๋ ฅ + BufferedWriter๋กœ ์ถœ๋ ฅํ•˜๊ธฐ.

 

Scanner์™€ BufferedReader์˜ ๋ฉ”๋ชจ๋ฆฌ & ์‹œ๊ฐ„์— ์žˆ์–ด์„œ ์ƒ๋‹นํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

BufferedReader / BufferedWriter ์•Œ์•„๋ณด๊ธฐ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€