코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/백준

8979번 : 올림픽

2022. 9. 18. 00:13

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

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

 

 

문제

 

 

코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        int arr[][] = new int[n][4];
        int g=0,s=0,m=0;
        for(int i=0;i<n;i++) {
            st = new StringTokenizer(br.readLine(), " ");
            arr[i][0] = Integer.parseInt(st.nextToken()); //국가번호
            arr[i][1] = Integer.parseInt(st.nextToken()); //금
            arr[i][2] = Integer.parseInt(st.nextToken()); //은
            arr[i][3] = Integer.parseInt(st.nextToken()); //동
            if(arr[i][0] == k) {
                g = arr[i][1];
                s = arr[i][2];
                m = arr[i][3];
            }
        }

        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[1]<o2[1]) return 1;
                else if (o1[1] == o2[1]) { //금메달 수 동일
                    if(o1[2]<o2[2]) return 1;
                    else if(o1[2] == o2[2]) { //은메달 수 동일
                        if(o1[3]<o2[3]) return 1;
                        else if (o1[3] == o2[3]) return 0; //동메달 수 동일
                        else return -1;
                    }
                    else return -1;
                }
                else return -1;
            }
        });

        for(int i=0;i<n;i++) {
            if (arr[i][1] == g && arr[i][2] == s && arr[i][3] == m) {
                System.out.println(i+1);
                break;
            }
        }
    }
}

 

 

해결방법

국가의 등수 => (자신보다 더 잘한 나라 수) + 1

국가번호와 금, 은, 동 각각의 메달 수를 입력받아 2차원 배열에 저장하고 금, 은 , 동 순으로 2차원 배열을 정렬하였다.

입력받을 때 등수를 알고 싶은 국가(k)의 금, 은, 동 각각의 메달 수를 변수 g, s, m에 저장해두었다.

이후 반복문을 돌려 해당 국가의 금, 은 동 각각의 메달 수가 g, s, m과 같아지면 빠져나오도록 구현하였고 해당 국가의 금, 은 동 각각의 메달 수가 g, s, m과 같아진다는 것은 자신보다 더 잘한 나라의 수를 구한 것이니까 곧 등수를 알고 싶은 국가의 등수를 알 수 있다는 의미가 된다. 

'알고리즘 > 백준' 카테고리의 다른 글

17615번 : 볼 모으기  (0) 2022.10.02
15904번 : UCPC는 무엇의 약자일까?  (0) 2022.09.19
2437번 : 저울  (0) 2022.09.15
1697번 숨바꼭질  (0) 2022.09.13
13164번 : 행복 유치원  (0) 2022.09.08
    '알고리즘/백준' 카테고리의 다른 글
    • 17615번 : 볼 모으기
    • 15904번 : UCPC는 무엇의 약자일까?
    • 2437번 : 저울
    • 1697번 숨바꼭질
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바