본문으로 바로가기

[백준 8979] 올림픽

category 알고리즘/백준 알고리즘 2018. 5. 18. 15:54

글에 개요


백준 알고리즘 8979번 "올림픽" 문제입니다.
백준 알고리즘 분류에서 '구현'에 있는 문제입니다.
이 문제는 정렬하는 문제입니다.

아래 링크를 들어가보시면 정렬하는 문제를 해결하기 위한 기본 개념이 들어있기 때문에 참고하시면 좋을 것 같습니다.


[백준 8979] 올림픽https://www.acmicpc.net/problem/8979

참고할 글
  1. http://brenden.tistory.com/40 ([백준 2577] 숫자의 개수 - 구현 문제)

  2. http://brenden.tistory.com/41 ([백준 2839] 설탕 배달 - 구현 문제)

  3. http://brenden.tistory.com/42 ([백준 10798] 세로읽기 - 구현 문제)

  4. http://brenden.tistory.com/44 ([백준 1764] 듣보잡 - 구현 문제)

  5. http://brenden.tistory.com/46 ([백준 2563] 색종이 - 구현 문제)

  6. http://brenden.tistory.com/54 ([백준 10984] 내 학점을 구해줘 - 구현 문제, 정렬 문제)


핵심 내용
  1. 정렬하는 문제라는 것을 인지하는 것이 중요합니다.
  2. 저는 중간에 실패라고 떴었던 이유가 Rank를 정해주는 과정에서 국가번호가 등장하면 break를 해줬었는데, 이 부분을 국가별 rank를 다 매겨준뒤 출력하니 문제가 발생하지 않았습니다....
해결 방법
  1. Nation 객체에 국가번호,금,은,동,랭킹에 대한 정보를 저장해줍니다.
    1. 생성자 부분에서 rank=1을 넣어준 이유는, 순위를 계산해주는 함수에서 금,은,동 갯수가 같을 때 그 전 국가의 rank에 값을 가져와야되는 로직으로 코딩했기 때문에 초기화해주어야 합니다.
  2. Arrays.sort(nationAry)를 통해 메달을 많이 받은 순으로 정렬해줍니다.
  3. calRank함수
    1. 금은동 갯수가 같다면 그 전 국가의 랭킹과 같은 랭킹으로 매겨준다.
    2. 1번 상황이 아니라면 국가배열의 크기만큼 넣어주면 된다. (국가배열의 크기 == 전체 국가중 꼴지의 순위를 매겨주는 것이기 때문입니다.)
  4. for문을 통해 순위를 알고 싶은 국가 번호를 가진 국가가 나오면 출력해준다.

해결한 코드



백준 참고 내용

시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초128 MB34751223100736.738%

문제

올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다.

  1. 금메달 수가 더 많은 나라 
  2. 금메달 수가 같으면, 은메달 수가 더 많은 나라
  3. 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 

각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번 국가가 모두 은메달 1개를 얻었으며, 4번 국가는 메달을 얻지 못하였다면, 1번 국가가 1등, 2번 국가와 3번 국가가 공동 2등, 4번 국가가 4등이 된다. 이 경우 3등은 없다. 

각 국가의 금, 은, 동메달 정보를 입력받아서, 어느 국가가 몇 등을 했는지 알려주는 프로그램을 작성하시오. 

입력

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수가 빈칸을 사이에 두고 주어진다. 전체 메달 수의 총합은 1,000,000 이하이다.

출력

출력은 단 한 줄이며, 입력받은 국가 K의 등수를 하나의 정수로 출력한다. 등수는 반드시 문제에서 정의된 방식을 따라야 한다. 

예제 입력 1 

4 3
1 1 2 0
2 0 1 0
3 0 1 0
4 0 0 1

예제 출력 1 

2


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

[백준 2935] 소음  (0) 2018.05.20
[백준 8979] 올림픽  (0) 2018.05.18
[백준 10984] 내 학점을 구해줘  (0) 2018.05.17
[백준 4673] 셀프 넘버  (0) 2018.05.10
[백준 6588] 골드바흐의 추측  (0) 2018.05.10
[백준 4948] 베르트랑 공준  (0) 2018.05.10

댓글을 달아 주세요