View

문제 링크:

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

 

15953번: μƒκΈˆ ν—Œν„°

첫 번째 쀄에 μ œμ΄μ§€κ°€ 상상λ ₯을 λ°œνœ˜ν•˜μ—¬ κ°€μ •ν•œ 횟수 T(1 ≤ T ≤ 1,000)κ°€ μ£Όμ–΄μ§„λ‹€. λ‹€μŒ T개 μ€„μ—λŠ” ν•œ 쀄에 ν•˜λ‚˜μ”© μ œμ΄μ§€κ°€ ν•΄λ³Έ 가정에 λŒ€ν•œ 정보가 주어진닀. 각 μ€„μ—λŠ” 두 개의 음이 μ•„λ‹Œ

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.StringTokenizer;

public class Main {

	/* 제1회 μ½”λ“œ νŽ˜μŠ€ν‹°λ²Œ 정보 */
	int[] rank1Info  = {1, 2, 3, 4, 5, 6};
	int[] prize1Info = {500, 300, 200, 50, 30, 10};
	
	/* 제2회 μ½”λ“œ νŽ˜μŠ€ν‹°λ²Œ 정보 */
	int[] rank2Info  = {1, 2, 4, 8, 16};
	int[] prize2Info = {512, 256, 128, 64, 32};
	
	public static void main(String[] args) throws IOException {
		Main solution = new Main();
		
		solution.solve();
	}
	
	public void solve() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			// λ“±μˆ˜ 가정을 돌릴 횟수
			int t = Integer.parseInt(st.nextToken());
			
			for (int i = 0; i < t; i++) {
				st = new StringTokenizer(br.readLine());
				
				int rank1 = Integer.valueOf(st.nextToken());
				int rank2 = Integer.valueOf(st.nextToken());
				
				int result = calc(rank1, rank1Info, prize1Info) 
						   + calc(rank2, rank2Info, prize2Info);
				
				bw.append(result + System.lineSeparator()); // '/r/n'κ³Ό 같은 μ—­ν• 
			}
			
			bw.flush();

			bw.close();
			br.close();
			
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public int calc(int p, int[] rankInfo, int[] prizeInfo) {
		// 총 μƒκΈˆ
		int totPrize  = 0;
		// μƒκΈˆμ„ 받을 수 μžˆλŠ” 인원
		int totPerson = Arrays.stream(rankInfo).sum();

		if (p > 0 && p <= totPerson) {
			int count = 0;
			
			for (int i = 0; i < rankInfo.length; i++) {
				count += rankInfo[i];
				
				if (p <= count) {
					totPrize += prizeInfo[i];
					
					return totPrize * 10000;
				}
			}
		}
		return totPrize * 10000;
	}
}

각각의 κΈ°λŠ₯을 ν•˜λŠ” 클래슀λ₯Ό λ”°λ‘œ λ§Œλ“€μ–΄μ„œ κ΅¬ν˜„ν•˜λ €κ³  ν–ˆλ‹€.
이후에 νŽ˜μŠ€ν‹°λ²Œ 정보가 더 μΆ”κ°€λ˜μ–΄λ„ μ‰½κ²Œ 계산할 수 μžˆκ²Œλ” 정보λ₯Ό λ‹΄λŠ” 객체가 있으면 쒋을 것 κ°™λ‹€.

Share Link
reply
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31