처음 작성한 코드는 다음과 같다.
#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 |