https://www.acmicpc.net/problem/11098
11098번: 첼시를 도와줘!
구단이 성적을 내지 못한다면 답은 새 선수 영입뿐이다. 이것은 오늘날 유럽 리그에서 가장 흔한 전략이고, 노르웨이의 로젠버그 팀은 이러한 전략이 성공한 대표적 예시다. 그들은 많은 스카
www.acmicpc.net
가장먼저 떠오른 방법
:
c를 이용하여, max(정답)에 해당하는 가격&이름을 담을 수 있는 변수를 선언해서 저장해두고 출력하기
하지만 c++의 장점을 살리지 못한 코드일 뿐더러, 선언한 변수도 많아 비효율적이라는 생각이 들었다.
#include <iostream>
#include <vector>
#include <cmath> //C++
using namespace std;
int main(int argc, char** argv)
{
int n;
cin >> n;
int p;
for (int i = 0; i < n; i++) {
cin >> p;
// 가격과 이름을 p번 입력받기
// max 가격 저장 필요
int price = 0;
int max_price = 0; // 매 테스트케이스마다 최대 가격 초기화
string name;
string max_name;
for (int j = 0; j < p; j++) {
cin >> price >> name;
if (price > max_price) {
max_price = price;
max_name = name;
}
}
cout << max_name << endl; // 테스트 케이스별로 결과 출력
}
return 0;
}
다르게 접근해본 방법
:
가격과 이름을 따로따로 저장하는 것보다는, 동시에 묶어서 한쌍으로 저장하는 방법을 고려해보았다.
vector<pair<int,string>> testcase(p);
vector와 pair를 이용하면 가격과 이름을 쌍으로 한 번에 저장할 수 있다.
여기서 p는 문제상 테스트케이스에서의 쌍의 개수를 의미하는데,
길이가 p고(=쌍의 총 개수) 이름이 'testcase'인 vector를 선언해서 사용했다.
#include <iostream>
#include <vector>
#include <cmath> //C++
using namespace std;
int main(int argc, char** argv)
{
int n;
cin >> n;
int p;
for (int i = 0; i < n; i++) {
cin >> p; // 가격과 이름을 p번 입력받기
vector<pair<int, string>> testcase(p); // // 길이가 p인 pair 타입의 벡터 testcase를 생성
int max_price = 0; // 테스트케이스마다 최대가격및 이름 초기화
string max_name;
for (int j = 0; j < p; j++) {
cin >> testcase[j].first >> testcase[j].second;
if (testcase[j].first > max_price) {
max_price = testcase[j].first; // max_price와 max_name대신에 max를 기억하는 인덱스 변수 1개로 대체해도 될듯
max_name = testcase[j].second;
}
}
cout << max_name << endl; // 테스트 케이스별로 결과 출력
}
return 0;
}
이 코드에서는 가격이 최대인경우의 가격과 이름을 변수를 따로두어 저장했는데,
풀고나니 차라리 '쌍'이라는 점을 이용하여 최대인 '쌍'에 해당하는 인덱스를 기억해두는 방법이
사용할 변수의 개수가 줄어든다는 면에서 더 효율적이라는 생각이 들었다.
그래서 수정한 코드.
// 첫번째 for문 안의 내용 변경
int max_index = 0; // int max_price와 string max_name 대신 사용
for (int j = 0; j < p; j++) {
cin >> testcase[j].first >> testcase[j].second;
if (testcase[j].first > testcase[max_index].first) {
max_index = j;
}
}
깨달은 점
:
가장 먼저 떠오른 방법으로 풀어보되,
메모리(공간)을 더 효율적으로 쓸 수 있는 방법이 있는지
다음에도 비슷한 문제를 맞닥뜨린다면 고려해봐야 겠다.
'코딩테스트 공부' 카테고리의 다른 글
[c++]백준1920번: 수 찾기 (0) | 2023.09.12 |
---|---|
[c++]백준1158번:요세푸스 문제 (0) | 2023.09.10 |
[c++]백준1427번:소트인사이드 (0) | 2023.09.03 |
[c++] 벡터 (0) | 2023.07.08 |