백준 8679번 구현문제를 Java로 풀어보았다.
세 가지 조건만 잘 비교해주면 쉽게 풀리는 구현 문제다.
- 금메달 수
- 금메달 수가 같다면 은메달 수
- 금메달 수와 은메달 수도 같다면 동메달 수
- 다 같으면 동일 등수
k
번 국가의 정보를 저장해두고 나머지 모든 국가를 for
문으로 돌며 위 조건들을 비교해주어 등수를 계산해주면 된다.
국가의 번호, 금메달 수, 은메달 수와 동메달 수의 정보들을 담은 Nation
클래스 하나를 선언했다.
static class Nation{
int id;
int gold;
int silver;
int bronze;
public Nation(){}
public Nation(int id, int gold, int silver, int bronze){
this.id = id;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
}
몇 번 국가인지 입력을 받으면 해당 국가를 targetNation
이란 변수에 초기화해주어 나머지 국가들과 비교했다. 타겟 국가의 rank
는 targetRank=1
로 초기화해주었다. 자기보다 높은 등수를 만날 때마다 +1씩 해주고 자기와 동일하거나 낮으면 그대로 둔다.
아래는 비교를 위한 코드다.
for(int i=0; i<n; i++){
if(nations[i].id == k) continue;
else{
if(targetNation.gold<nations[i].gold) targetRank++; // 비교 대상보다 금메달 수가 적으면 +1
if(targetNation.gold==nations[i].gold && targetNation.silver<nations[i].silver) targetRank++; // 금메달 수는 같고 은메달 수가 적으면 +1
if(targetNation.gold==nations[i].gold && targetNation.silver==nations[i].silver &&
targetNation.bronze<nations[i].bronze) targetRank++; // 금, 은 같고 동메달 수가 적으면 +1
}
}
아래는 내가 제출한 코드다.
import java.util.*;
import java.io.*;
public class boj8979 {
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk = new StringTokenizer(bfr.readLine());
int n = Integer.parseInt(stk.nextToken());
Nation[] nations = new Nation[n+1];
int k = Integer.parseInt(stk.nextToken());
Nation targetNation = new Nation(); int targetRank=1;
for(int i=0; i<n; i++){
stk = new StringTokenizer(bfr.readLine());
nations[i] = new Nation(Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()), Integer.parseInt(stk.nextToken()));
if(nations[i].id == k) targetNation = nations[i];
}
for(int i=0; i<n; i++){
if(nations[i].id == k) continue;
else{
if(targetNation.gold<nations[i].gold) targetRank++;
if(targetNation.gold==nations[i].gold && targetNation.silver<nations[i].silver) targetRank++;
if(targetNation.gold==nations[i].gold && targetNation.silver==nations[i].silver &&
targetNation.bronze<nations[i].bronze) targetRank++;
}
}
bfw.write(String.valueOf(targetRank));
bfw.close();
}
static class Nation{
int id;
int gold;
int silver;
int bronze;
public Nation(){}
public Nation(int id, int gold, int silver, int bronze){
this.id = id;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
}
}