백준 8679번( 자바 )

Flash·2022년 1월 9일
0

BOJ-Algorithm

목록 보기
21/51
post-thumbnail

구현

백준 8679번 구현문제를 Java로 풀어보았다.
세 가지 조건만 잘 비교해주면 쉽게 풀리는 구현 문제다.


무엇을 비교해야할까?

  1. 금메달 수
  2. 금메달 수가 같다면 은메달 수
  3. 금메달 수와 은메달 수도 같다면 동메달 수
  4. 다 같으면 동일 등수

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이란 변수에 초기화해주어 나머지 국가들과 비교했다. 타겟 국가의 ranktargetRank=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;
        }
    }
}

profile
개발 빼고 다 하는 개발자

0개의 댓글