티스토리 뷰
반응형
백준 등수 구하기 1205 C++
문제 설명
백준 온라인 저지 1205번 등수 구하기 문제는 다음과 같은 상황을 다룹니다.
- 랭킹 리스트에는 최대
P
개의 점수가 비오름차순(=내림차순)으로 저장되어 있습니다. - 새로운 점수가 들어왔을 때, 이 점수가 몇 등에 위치하게 되는지 구하는 문제입니다.
- 만약 리스트가 꽉 차 있다면, 새 점수가 마지막 점수보다 커야만 들어갈 수 있습니다.
- 동점일 경우에는 “같은 점수 중 가장 높은 순위”를 공유하게 됩니다.
- 리스트에 들어갈 수 없다면
-1
을 출력합니다.
접근 방법
- 입력 처리
N
: 현재 리스트에 있는 점수 개수new_score
: 새 점수P
: 랭킹 리스트 최대 크기
- 등수 계산
- 랭킹 리스트는 내림차순이므로, 위에서부터 차례대로 비교하면서 새 점수보다 큰 점수 개수만큼 등수를 밀립니다.
new_score < arr[i]
이면rank++
new_score ≥ arr[i]
가 되는 순간 현재rank
가 확정됩니다.
- 출력 조건
- 리스트가 비어 있다면 → 무조건 1등.
- 리스트 크기
N < P
라면 → 무조건 들어갈 수 있음. - 리스트 크기
N == P
라면 → 마지막 점수(arr[N-1]
)보다 커야 들어갈 수 있음. - 들어갈 수 없으면
-1
.
C++ 코드
#include <iostream>
#include <cstring>
using namespace std;
bool Check(char c)
{
return (c=='a' || c=='e' || c=='i' || c=='o' || c=='u');
}
int main(void)
{
while(true)
{
char arr[100];
int cnt_mo=0, cnt_ja=0;
bool mo=false, check=true;
cin >> arr;
if(strcmp(arr,"end")==0) break;
for(int i=0; arr[i]!='\0'; i++)
{
if(Check(arr[i]))
{
mo = true;
cnt_mo++;
cnt_ja = 0;
}
else
{
cnt_ja++;
cnt_mo = 0;
}
if(cnt_mo >= 3 || cnt_ja >= 3)
{
check = false;
break;
}
if(i > 0 && arr[i] == arr[i-1] && arr[i] != 'e' && arr[i] != 'o')
{
check = false;
break;
}
}
if(mo && check)
cout << "<" << arr << "> is acceptable." << endl;
else
cout << "<" << arr << "> is not acceptable." << endl;
}
return 0;
}
코드 설명
if (N == 0)
리스트가 비어 있다면 새 점수가 무조건 1등입니다.- 등수 계산
for
문에서 내림차순 리스트를 순회하면서, 새 점수보다 큰 값이 나올 때마다 등수를 하나씩 밀립니다. 처음으로new_score ≥ arr[i]
가 되는 순간 그 자리에 들어갈 수 있으므로break
합니다. - 리스트 크기 체크
N < P
→ 아직 자리가 남았으므로 들어갈 수 있습니다.N == P
→ 마지막 원소arr[N-1]
보다 엄격히 커야 들어갈 수 있습니다.- 동점일 경우에는
-1
을 출력해야 합니다.
핵심 포인트
- 내림차순 정렬이므로, 등수를 찾을 때 끝까지 볼 필요가 없습니다.
- 다만, **리스트가 꽉 찼을 때 마지막 원소와 비교하는 조건**이 중요합니다.
- 이 조건을 놓치면 동점일 때 잘못된 답이 나옵니다.
반응형
'백준 스터디' 카테고리의 다른 글
백준 영단어 암기는 괴로워 (20920번) C++ (1) | 2025.08.31 |
---|---|
백준 비밀번호 발음하기 (4659번) 파이썬 (0) | 2025.08.31 |
백준 흙길 보수하기 1911번 파이썬 (0) | 2025.08.30 |
백준 1911번 흙길 보수하기 C++ (0) | 2025.08.30 |
백준 14891번: 톱니바퀴 (파이썬) (1) | 2025.08.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 문제 풀이
- 코딩테스트
- C++ 알고리즘
- 알고리즘기초
- 그리디알고리즘
- c++알고리즘
- 인접 행렬
- 그래프 탐색
- 문제풀이
- 객체지향
- 프로그래밍
- DP
- 문자열처리
- c언어
- 알고리즘
- 파이썬코딩
- dfs
- 백준
- 알고리즘문제풀이
- 브루트포스
- 코딩
- 파이썬
- 동적 계획법
- python 알고리즘
- C++
- 알고리즘 문제풀이
- 동적계획법
- Python
- 그리디
- 코딩 테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형