백준 1205 - 등수구하기(C언어)

컴퓨터/문제풀이집

728x90
반응형

 

 

1205번: 등수 구하기

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

www.acmicpc.net

문제 파악 및 구현 준비

  • 총 4개의 입력 값
    • 1번째 (N) : 현재 기록된 점수들의 개수
    • 2번째 (myscoure) : 나의 점수
    • 3번째 (P) : 랭킹에 등록될 수 있는 점수의 개수
    • 4번째 :현재 기록된 점수들의 점수 값
  • 나의 점수가 랭킹에 등록될 수 있는가 ? 
    • 만약 현재 기록된 점수가 없다면 1
    • 랭킹에 등록될수 없다면 -1
    • 이외에는 등수를 출력
  • 구현 아이디어
    • 입력받은 N개의 점수들을 나의 점수와 비교하면서 측정한다
      • 나의 점수와 리스트 각각의 점수를 비교
        • 만약 내점수보다 높다면 나의 랭크를 한 단계식 낮추고 랭크에 등록되는 개수를 카운팅
        • 만약 내점수와 같다면 동일 등수이기 때문에 랭크 개수만 카운팅
        • 만약 2가지 조건이 틀리다면 계산식 탈출
      • 그다음 예외 처리 2가지 확인
        • 카운팅 된 랭크의 개수가 P와 같다면 랭크 기제 불가능 즉 -1 
        • N이 0이라면 1
      • 이후 출력
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	//입력 받을 4개의 인자
	int N;
	int scourelist[100] = {0};
	int myscoure;
	int P;

	int rankcount = 0;
	int myrank = 1;

	//입력 받기 구현
	scanf("%d %d %d", &N, &myscoure, &P);
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &scourelist[i]);
	}

	//계산 구현
	for (int i = 0; i < N; i++)
	{
		if (myscoure < scourelist[i])
		{
			myrank++;
		}
		else if (myscoure == scourelist[i])
		{

		}
		else
		{
			break;
		}
		rankcount++;
	}

	//예외
	if (rankcount == P)
	{
		myrank = -1;
	}
	if (N == 0)
	{
		myrank = 1;
	}

	//답 출력
	printf("%d\n", myrank);
	return 0;
}

 

후기

초반에 정렬을 하고 하는 게 편할까 생각했다.

정렬은 필요 없이 그냥 나의 점수와 랭킹 제한수, 랭킹점수의 점수들만 가지고 쉽게 구현할 수 있었다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :