일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 8-Puzzle
- stack
- Modern C++
- BOJ
- knapsack Problem
- Bronze
- BFS
- 프로그래머스
- level1
- programmers
- algorithm
- Silver
- two pointer
- Zenject
- 3D RPG
- Project
- Gold
- binary search
- Flyweight Pattern
- PrefixSum
- effective C++
- SWEA
- solid 원칙
- level3
- Euclidean
- Unity
- LEVEL2
- 프로세스 상태
- dirtyflag pattern
- trie
Archives
- Today
- Total
Patrick's Devlog
[BOJ/C++] 등수 구하기(1205번) 본문
1. 개요
https://www.acmicpc.net/problem/1205
1-1. 설명
태수가 즐겨하는 게임은 랭킹 리스트가 존재한다. 매번 게임할때마다 얻는 점수가 비오름차순으로 저장되어 있다. 이 랭킹 리스트 등수는 보통 위에서 몇번째있는 점수인지로 결정한다. 하지만, 점수가 같을땐 그 점수의 등수 중 가장 작은 등수가 된다.
랭킹 리스트에 올라갈 수 있는 점수의 개수 P가 주어진다. 그리고 리스트에 있는 점수 N개가 비오름차순으로 주어지며, 태수의 새로운 점수가 주어진다. 이때, 태수의 새로운 점수가 랭킹 리스트에서 몇등하는지 구하는 프로그램을 작성한다. 랭킹리스트에 올라갈 수 없을정도로 점수가 낮으면 -1을 출력하고, 랭킹 리스트가 꽉차있을때 새 점수가 이전 점수보다 좋을때만 점수가 바뀐다.
1-2. 제한 사항
- 첫 줄에 현 랭킹 리스트 개수 N, 태수의 새로운 점수, 최대 랭킹 리스트 개수 P가 주어짐
- P는 10 이상 50 이하 정수, N은 0 이상 P 이하 정수
- 점수는 2,000,000,000 이하 자연수 or 0
- 둘째 줄에 N개수 만큼 점수 주어짐, 만약 N이 0일시 둘째줄은 출력 X
2. 구현
2-1. 풀이
이래저래 조건들이 조금 복잡한 문제이다. 조건을 잘 고려해서 코딩하면 금방 할 수 있다. 조건을 잘 설계해서 풀면 된다.
2-2. 코드
#include <iostream>
#include <algorithm>
using namespace std;
int ranking[51];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int N, score, P, rankNum = 1;
bool outputFlag = false;
cin >> N >> score >> P;
for (int i = 1; i <= N; i++) cin >> ranking[i];
if (score <= ranking[P] && (P == N)) cout << "-1"; // 랭킹 리스트가 가득차 있고, 점수가 낮을 때
else {
if (N == 0) cout << rankNum; // 랭킹 리스트가 비었을 때
else {
for (int i = 1; i <= N; i++) {
if (ranking[i] > score) { // 점수가 낮을 때
rankNum = i + 1;
}
else if (ranking[i] < score) { // 점수가 현 랭킹 점수보다 높을 때
cout << rankNum;
outputFlag = true;
break;
}
else if (ranking[i] == score) { // 점수와 현 랭킹 점수가 동일할 때
if (i == N) { // 동일한 점수가 끝까지 리스트에 저장돼있을 때
cout << rankNum;
outputFlag = true;
}
else continue;
}
}
if (!outputFlag) { // 아직 랭킹을 출력하지 않았을 때
cout << rankNum;
}
}
}
return 0;
}
'Algorithm > Algorithms Practice' 카테고리의 다른 글
[프로그래머스/C++] 성격 유형 검사하기 (1) | 2022.10.06 |
---|---|
[BOJ/C++] 0의 개수(11170번) (0) | 2022.10.05 |
[BOJ/C++] 생일(5635번) (0) | 2022.10.03 |
[BOJ/C++] 계단 오르기(2579번) (0) | 2022.10.02 |
[BOJ/C++] 1로 만들기(1463번) (1) | 2022.10.01 |