C++ Programming/백준

[C++백준 1205:등수 구하기]

2021. 7. 1. 23:56
목차
  1. 문제 링크
  2.  
  3. 문제
  4. 입력
  5. 출력
  6. 해석
  7. 코드
  8. Memo

문제 링크

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

 

1205번: 등수 구하기

첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000

www.acmicpc.net

 

문제

유진이가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다.

이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.

예를 들어 랭킹 리스트가 100, 90, 90, 80일 때 각각의 등수는 1, 2, 2, 4등이 된다

랭킹 리스트에 올라 갈 수 있는 점수의 개수 P가 주어진다. 그리고 리스트에 있는 점수 N개가 비오름차순으로 주어지고, 송유진의 새로운 점수가 주어진다. 이때, 송유진의 새로운 점수가 랭킹 리스트에서 몇 등 하는지 구하는 프로그램을 작성하시오. 만약 점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1을 출력한다.

만약, 랭킹 리스트가 꽉 차있을 때, 새 점수가 이전 점수보다 더 좋을 때만 점수가 바뀐다. (예제 2)

입력

첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다. 둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다. 둘째 줄은 N이 0보다 큰 경우에만 주어진다.

출력

첫째 줄에 문제의 정답을 출력한다.

 

해석

입력받을 수 만큼 벡터에 저장한다.

벡터의 길이가 랭킹 리스트에 올라갈 수 있는 수와 같고, 벡터에 맨 마지막에 있는 수가 송유진의 점수보다 높거나 같다면 송유진은 랭킹 리스트에 올라갈 수 없다. (내림차순으로 점수가 주어지기 때문에)

랭킹 리스트가 꽉 차 있지만 송유진의 점수가 더 높다면 랭킹 리스트를 바꿔줘야 한다. 이 부분은 벡터에서 송유진의 점수보다 높은 점수의 개수를 세어주면 된다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <vector>
using namespace std;
 
// 내림차순으로 점수가 주어진다.
int main() {
    vector<int> list;
    int N, P, score, val;
    int rank = 1;
    cin >> N >> score >> P;
 
    // 점수 입력
    for (int i = 0; i < N; i++) {
        cin >> val;
        list.push_back(val);
    }
 
    if (list.size() == P && list.back() >= score) {
        cout << -1;
        return 0;
    }
    // 필요없는 코드..
    //else if (list.size() == P && list.back() < score) {
    //    list.erase(list.begin() + (P-1));
    //}
    for (auto iter = list.begin(); iter != list.end(); iter++) {
        if (*iter > score) {
            rank++;
        }
        // 필요없는 코드..
        //else if (*iter == score) {
        //    rank = rank;
        //}
        //else {
        //    cout << rank;
        //    return 0;
        //}
    }
    cout << rank;
}
Colored by Color Scripter
cs

 

 

 

Memo

비오름차순으로 입력된다는 말이 내림차순으로 입력된다는 뜻인지 이해하지 못해서 꽤나 애를 먹었다.

또 벡터에 넣었던 점수들을 제거하고 다시 넣으려고 하니 복잡해졌던 코드.

N이 P보다 작거나 같기 때문에 삭제해줄 필요는 없었다.

  1. 문제 링크
  2.  
  3. 문제
  4. 입력
  5. 출력
  6. 해석
  7. 코드
  8. Memo
'C++ Programming/백준' 카테고리의 다른 글
  • [C++백준 1085번:직사각형에서 탈출]
  • [C++백준 1009:분산처리]
  • [C++백준 1181:단어 정렬]
  • [C++백준 1158:요세푸스 문제]
Krrong
Krrong
Krrong
노는게 제일 좋아
Krrong
전체
오늘
어제
  • 분류 전체보기 (302)
    • Android (2)
    • 우아한테크코스 (46)
      • Level 5 ~ (3)
      • Level 4 (8)
      • Level 3 | Project (8)
      • Level 2 (12)
      • Level 1 | Mission (4)
      • Level 1 | 정리 (5)
      • 프리코스 (6)
    • 스터디 (1)
      • 기술면접 질문 정리 (1)
      • Kotlin in Action (0)
    • AI⦁딥러닝 (5)
    • Jetson Xavier (9)
    • Computer Vision (6)
      • GoProCam (2)
      • OpenCV (4)
    • (구)Android (36)
      • 이론 (4)
      • Java (20)
      • Kotlin (12)
    • C++ Programming (161)
      • 백준 (146)
      • 알고리즘 (13)
      • STL 사용법 (2)
    • Git (5)
    • Spring (5)
    • 활동 (3)
    • 기타 (3)
    • 🇩🇪 (13)
      • 일상 (13)
    • ✈️ 여행 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 티스토리홈

공지사항

인기 글

태그

  • 알고리즘
  • 퀵소트
  • 정렬알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.
Krrong
[C++백준 1205:등수 구하기]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.