문제 출처: https://www.acmicpc.net/problem/11098
11098번: 첼시를 도와줘!
구단이 성적을 내지 못한다면 답은 새 선수 영입뿐이다. 이것은 오늘날 유럽 리그에서 가장 흔한 전략이고, 노르웨이의 로젠버그 팀은 이러한 전략이 성공한 대표적 예시다. 그들은 많은 스카
www.acmicpc.net
Sol)
#include <stdio.h>
#include <string.h>
int main()
{
int n, p;
scanf("%d", &n);
while(n--){
int price = 0;
char name[21];
int max_price = 0;
char ans[21];
scanf("%d", &p);
for(int i = 0; i < p; i++){
scanf("%d %s", &price, name);
if (price > max_price) { //모든 선수 가격 다 다르므로 등호 포함 X
max_price = price;
strcpy(ans, name);
}
}
printf("%s\n", ans);
}
return 0;
}
- 풀이 방향
결국 기본적인 아이디어는 간단하다. 테스트 케이스 내의 최대값을 찾으라는 것이다. 문자열이라는 자료형을 어떤 식으로 묶어서 저장할 것인지를 정하는 것이 관건이 될 것 같다. 일단, 주어진 가격의 범위가 1바이트로 표현할 수 있는 범위를 넘어가므로 char형 배열에 가격과 이름, 둘 다 저장할 수는 없다. 서로 다른 종류의 관련있는 자료형을 묶어주는 구조체를 사용할 수도 있겠다. 하지만 가장 간단한 방법은 그냥 가격 변수와 이름 변수를 따로 int, char[] 로 선언하고, 비교 결과를 int max 변수와 답을 저장할 ans배열에 저장하는 것이다.
- 풀이
max_price를 0으로 초기화 해 어떤 값이 price값으로 들어오더라도 반드시 첫번째 price값보다 max_price값을 작게 해주어 첫번째 price값을 max_price값으로 만들고 비교해 준다. 그 후, max_price값이 갱신될 때마다 가장 비싼 선수의 이름을 저장하는 배열인 ans에 선수의 이름을 strcpy함수를 이용해 복사해준다.
- 문제에 대한 사견
변수의 수명, 비교하는 부분등을 꼼꼼하게 확인만 한다면 그렇게 어렵지 않은 문제였다.
'BOJ' 카테고리의 다른 글
백준 3009번 네 번째 점 [C언어] (0) | 2022.08.25 |
---|---|
백준 10163번 색종이 [C언어] (0) | 2022.08.22 |
백준 2447번 별 찍기 - 10 [C언어] (0) | 2022.08.21 |
백준 17425번 약수의 합 [C언어] (0) | 2022.08.19 |
백준 17427번 약수의 합 2 [C언어] (0) | 2022.08.18 |