BOJ

백준 11098번 첼시를 도와줘! [C언어]

Sloth Coder 2022. 8. 22. 23:50

문제 출처: 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함수를 이용해 복사해준다.

 

  • 문제에 대한 사견

변수의 수명, 비교하는 부분등을 꼼꼼하게 확인만 한다면 그렇게 어렵지 않은 문제였다.