Algorithm/백준 알고리즘

백준_8979 올림픽(자바) / 구현

미스터로즈 2021. 11. 16. 09:21

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

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

public class Back_8979 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		ArrayList<nation> arr = new ArrayList<>();
		
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			int n = Integer.parseInt(st.nextToken());
			int g = Integer.parseInt(st.nextToken());
			int s = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			arr.add(new nation(n, g, s, b));
		}
		Collections.sort(arr);
		int ans =1;
		
		if(arr.get(0).n==K) {
			System.out.println(ans);
			System.exit(0);
		}
		for (int i = 1; i < N; i++) {
			if(arr.get(i).g==arr.get(i-1).g&&
					arr.get(i).s==arr.get(i-1).s&&
					arr.get(i).b==arr.get(i-1).b) {
			}else {
				ans=i+1;
			}
			
			if(arr.get(i).n==K) {
				break;
			}		
			
		}
		System.out.println(ans);
	}
	
	static class nation implements Comparable<nation>{
		int n;
		int g;
		int s;
		int b;
		public nation(int n, int g, int s, int b) {
			super();
			this.n = n;
			this.g = g;
			this.s = s;
			this.b = b;
		}
		@Override
		public int compareTo(nation o) {
			if(this.g==o.g) {
				if(this.s==o.s) {
					return o.b-this.b;
				}
				return o.s-this.s;
			}
			return o.g-this.g;
		}
		
	}
}

 

※ 내 생각

이 문제는 구현을 이용해서 푸는 문제입니다.

저는 구현과 함께 그리디 알고리즘을 이용해서 문제를 풀었습니다.
클래스에 금, 은, 동에 대한 내림차순 정렬을 진행합니다.

정렬된 내용을 가지고 찾고자 하는 위치를 찾아주면 됩니다.