[고득점Kit][완전 탐색] 모의고사 ⭐
카테고리: Programmers
C++로 풀이했습니다.
출처 : 프로그래머스 고득점 Kit 문제 풀이. https://programmers.co.kr/learn/challenges
[완전 탐색] 모의고사
난이도 ⭐
문제
내 풀이 ⭕
통과된 풀이긴 했지만 좀 아쉽다! 더 간단하게 할 수 있었는데 😢
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int, int> a, pair<int, int> b)
{
return a.second > b.second;
}
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<pair<int,int>> temp{make_pair(0, 0), make_pair(1, 0), make_pair(2, 0)};
vector<int> one{1, 2, 3, 4, 5};
vector<int> two{2, 1, 2, 3, 2, 4, 2, 5};
vector<int> three{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
for(int i = 0; i < answers.size(); i++)
{
if (i >= one.size())
{
if (answers[i] == one[i % one.size()])
temp[0].second++;
}
else
{
if (answers[i] == one[i])
temp[0].second++;
}
}
for(int i = 0; i < answers.size(); i++)
{
if (i >= two.size())
{
if (answers[i] == two[i % two.size()])
temp[1].second++;
}
else
{
if (answers[i] == two[i])
temp[1].second++;
}
}
for(int i = 0; i < answers.size(); i++)
{
if (i >= three.size())
{
if (answers[i] == three[i % three.size()])
temp[2].second++;
}
else
{
if (answers[i] == three[i])
temp[2].second++;
}
}
sort(temp.begin(), temp.end(), compare);
for(int i = 0; i < 3; i++)
{
if (i >= 1 && temp[i - 1].second != temp[i].second)
break;
answer.push_back(temp[i].first + 1);
}
return answer;
}
아쉬운 점
- 수포자 1,2,3명의 답을 채점할 때 for문을 3 번씩 따로따로 돌릴 필요가 없었다.
- 하나의 for문으로 처리 가능
if (i >= one.size())
else
이렇게 나눌 필요가 없었다.- 어차피
i < one.size()
이면i % two.size()
은i
가 되기 때문에- 2 % 10 = 2
- 어차피
- 최대값을 구하기 위해 정렬을 했고 정렬 전에 인덱스를 기억하기 위해 pair 원소를 담는
temp
벡터를 선언하고 사용했었는데- max_element 함수를 사용하면 그냥 간단하게 정렬할 필요 없이 최대값을 구할 수 있었다!
- STL알고리즘 헤더에 있는 max_element 함수 유용하니 꼭 기억하기!
- 최대값 원소가 위치한 반복자를 리턴하니
*
을 사용하여 간접참조 하기
- 최대값 원소가 위치한 반복자를 리턴하니
- STL알고리즘 헤더에 있는 max_element 함수 유용하니 꼭 기억하기!
- max_element 함수를 사용하면 그냥 간단하게 정렬할 필요 없이 최대값을 구할 수 있었다!
- vector <int> 는 사이즈만 지정 해주면 초기화 하지 않아도 전부
0
으로 초기화가 된다.vector<int> temp{0, 0, 0}
도 괜찮지만vector<int> temp(3)
보완
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> temp(3);
vector<int> one{1, 2, 3, 4, 5};
vector<int> two{2, 1, 2, 3, 2, 4, 2, 5};
vector<int> three{3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
for(int i = 0; i < answers.size(); i++)
{
if (answers[i] == one[i % one.size()]) temp[0]++;
if (answers[i] == two[i % two.size()]) temp[1]++;
if (answers[i] == three[i % three.size()]) temp[2]++;
}
int max = *max_element(temp.begin(), temp.end());
for(int i = 0; i < 3; i++)
{
if (temp[i] == max)
answer.push_back(i + 1);
}
return answer;
}
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기