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

[백준] 23246번 : Sport Climbing Combined(JAVA)

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

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

 

23246번: Sport Climbing Combined

입력은 표준입력을 사용한다. 첫째 줄에 선수의 명수를 나타내는 양의 정수 $n$ ($3 \le n \le 100$)이 주어진다. 이어 $n$개의 줄 각각에 네 정수 $b_i$, $p_i$, $q_i$, $r_i$가 주어지는데, $b_i$는 $i$번째 선수

www.acmicpc.net

 

풀이

분류로는 정렬이라고 되어있지만, 정렬없이도 가능합니다.

0번째에 번호 1~3번째에 순위를 입력받습니다.

 

while문을 돌면서 number의 값을 1부터 계속해서 증가시킵니다.(값이 낮은게 1순위가 되므로)

number과 1~3순위를 곱한값이 같으면 answer에 값을 넣어줍니다.

다시 한번 값이 같은 순간이 오면 answer이 0이 아니므로 두번째 규칙(합이 작은 값을 넣어줌)을 따른 후 이에 해당하지 않으면 3번째 규칙(번호가 낮은 값을 넣어줌)을 입력받습니다.

 

※ answer이 0이 아닌경우 체크할때는 다음에 그 번호를 다시 체크해서 넣어줘야 합니다.

소스코드

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

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[][] num = new int[n][4];
		
		for(int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for(int j = 0; j < 4; j++) {
				num[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		int count = 0, number = 1;
		StringBuilder sb = new StringBuilder();
		while(true) {
			int answer = 0, w = 0;
			boolean flag = false;
			for(int i = 0; i < n; i++) {
				int check = num[i][1] * num[i][2] * num[i][3];
				
				if(check == number && num[i][0] != 0) {
					int sum = num[w][1] + num[w][2] + num[w][3];
					if(answer == 0) {
						answer = num[i][0];
						w = i;
					}
					else {
						int sumi = num[i][1] + num[i][2] + num[i][3];
						flag = true;
						if(sumi < sum) {
							answer = num[i][0];
							w = i;
						}
						else if(sumi == sum && answer > num[i][0]){
							answer = num[i][0];
							w = i;
						}
					}
				}
			}
			if(answer != 0) {
				num[w][0] = 0;
				sb.append(answer).append(" ");
				count++;
			}
			
			if(count == 3) {
				break;
			}
			
			if(!flag) {
				number++;
			}
		}
		System.out.print(sb);
	}
}
728x90
반응형

댓글