본문 바로가기
백준/20001 - 25000

[백준] 23334번 : Olympic Ranking(JAVA)

by lms0806 2021. 10. 30.
728x90
반응형

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

 

23334번: Olympic Ranking

The first line of the input contains one positive integer n. Then n lines follow. Each of the following lines contains three non-negative integers g, s, b, and the name of a country or NOC. They are separated by blanks.

www.acmicpc.net

풀이

금메달, 은메달, 동메달 나눠서 값을 비교한 후 answer를 바꿔주다가 마지막에 제출할 경우 800~900사이로 java11만 될겁니다(시간초과가 나올 수도 있음)

이러한 방법은 어쩔땐 성공하고 어쩔땐 실패하므로 올바른 방법이 아닙니다.

 

  • g, s, b ∈ {0, 1, ..., 999}

조건에 이러한 부분이 있으므로 금메달 * 1000000 + 은메달 * 1000 + 동메달

으로 계산해서 max를 체크할 경우 서로의 갯수가 건드리지 않고 계산하므로 이렇게 계산할 경우 완벽하게 차이를 체크할 수 있습니다.

또한 max의 값을 체크한 후에 max값을 넘을 경우에만 뒤에 answer을 받아주면 불필요한 부분을 받지 않아도 되서 좀 더 빠르게 풀 수 있습니다.

※ 도움 : nahwasa님

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		
		int max = 0;
		String answer = "";
		while(n --> 0) {
			String[] str = br.readLine().split(" ");
			int a = Integer.parseInt(str[0]) * 1000000 + Integer.parseInt(str[1]) * 1000 + Integer.parseInt(str[2]);
			
			if(max < a) {
				max = a;
				answer = "";
				for(int i = 3; i < str.length; i++) {
					answer += str[i] + " ";
				}
			}
		}
		System.out.print(answer);
	}
}

 

728x90
반응형

댓글