백준

백준 1205 등수 구하기 c++

2024. 4. 2. 23:36

 

 

 

처음 작성한 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main(){
    int n, new_score, p;
    cin >> n >> new_score >> p;
    
    int arr[p+1]={0};    
    for(int i=0; i<n; i++)
        cin >> arr[i];
    
    int answer = -100;
    for(int i=n-1; i>=0; i++){
        if( arr[i] >= new_score ){
            answer = i+1;
            break;
        }
    }
    
    //인덱스 값(answer)에 1 더해서 실제 등수로 출력
    if(1<=answer+1 && answer+1<=p)
        cout << answer+1;
    else
        cout << "-1";
    
    return 0;
}

 

 

 

하지만 등수의 경우, 

ex. 100 90 90 80이 있다면 1 2 3 4가 아니라 1 2 2 4가 되도록 출력해야했다.

answer(등수 계산하는 변수)를 다시 구현해주어야 했다.

다시 작성한 코드는 다음과 같다.

#include <iostream>
using namespace std;

int main(){
    //입력받기
    int n, new_score, p;
    cin >> n >> new_score >> p;
    
    int arr[p+1];    
    for(int i=0; i<n; i++)
        cin >> arr[i];
    
    //뒤에서부터 고려하여, arr 배열에 (new_score)값 순서에 맞게 끼워넣어주기
    int answer = -100;
    for(int i=n-1; i>=0; i++){
        if( arr[i] >= new_score ){
            arr[i+1] = new_score;
            answer = i+1;
            break;
        }
    }
    
    //앞에서부터 (new_score)값이 들어간곳까지 돌며, 등수 계산
    int final_answer = 1;
    int temp = 0;
    for(int i=1; i<=answer; i++){
        if(arr[i-1] != arr[i]){
            final_answer++;
            final_answer += temp;
            temp = 0;
        }
        else{ //arr[i-1] == arr[i]
            temp++;
        }         
    }
    
    //계산한 등수 출력
    if(1<=final_answer && final_answer<=p)
        cout << final_answer;
    else
        cout << "-1";
    
    return 0;
}

 

 

 

전체적인 구조와 생각은 잘 짰지만 사소한 조건을 고려해주는 점이 부족했다.

더 간단하게 생각해도 되는 문제를 복잡하게 구현하는 경향이 있었다.

 

 

 

 

 

'백준' 카테고리의 다른 글

백준 19637 IF문 좀 대신 써줘 c++  (0) 2024.04.05
백준 1138 한 줄로 서기 c++  (0) 2024.04.03
9655 돌 게임 c++  (0) 2024.04.02
백준 4659 비밀번호 발음하기 c++  (0) 2024.04.01
백준 10431 줄세우기 c++  (0) 2024.03.31