https://programmers.co.kr/learn/courses/30/lessons/42840
처음으로 프로그래머스에서 받아본 점수..(●'◡'●)
지난 학기 자료구조 과제로 프로그래머스에 있는 문제들을 풀기는 했는데
다 C로 구현해야 해서 채점을 해보지 못했었다
아까 나동빈님의 대기업 코딩테스트 준비 관련 영상을 봤는데
완전 탐색 먼저 풀어야 한다고 하셔서 프로그래머스에서 완전 탐색 문제를 찾아보았다!
그 중 꽤 많은 사람들이 맞은 것으로 뜨는 '모의고사' 문제를 풀었다
처음에 테스트케이스 전부 실패로 떠서 역시 프로그래머스는 호락호락하지 않은건가 했는데
내가 그냥 algorithm 헤더파일 포함하는 걸 까먹었던 거였다 ㅎ
< 스케치 >
CODE
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> answerPattern_1 = {1, 2, 3, 4, 5};
vector<int> answerPattern_2 = {2, 1, 2, 3, 2, 4, 2, 5};
vector<int> answerPattern_3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
int idx_1 = 0, idx_2 = 0, idx_3 = 0;
int score_1 = 0, score_2 = 0, score_3 = 0;
for(int i=0; i<answers.size(); i++)
{
if(answers[i] == answerPattern_1[idx_1++])
{
score_1++;
}
if(answers[i] == answerPattern_2[idx_2++])
{
score_2++;
}
if(answers[i] == answerPattern_3[idx_3++])
{
score_3++;
}
if(idx_1 == answerPattern_1.size())
idx_1 = 0;
if(idx_2 == answerPattern_2.size())
idx_2 = 0;
if(idx_3 == answerPattern_3.size())
idx_3 = 0;
}
// 점수가 1명이 큰 경우 1,2,3
// 점수가 2명이 큰 경우 1,2 / 1,3 / 2,3
// 점수가 3명이 같은 경우 1,2,3
if(score_1 == score_2 && score_1 == score_3 && score_2 == score_3)
{
answer.push_back(1);
answer.push_back(2);
answer.push_back(3);
return answer;
}
if(score_1 >= score_2 && score_1 >= score_3)
{
answer.push_back(1);
if(score_1== score_2)
answer.push_back(2);
if(score_1 == score_3)
answer.push_back(3);
}
else if(score_2 >= score_1 && score_2 >= score_3)
{
answer.push_back(2);
if(score_2 == score_1)
answer.push_back(1);
if(score_2 == score_3)
answer.push_back(3);
}
else if(score_3 >= score_1 && score_3 >= score_2)
{
answer.push_back(3);
if (score_3 == score_1)
answer.push_back(1);
if (score_3 == score_2)
answer.push_back(2);
}
sort(answer.begin(), answer.end()); // 오름차순 정렬
return answer;
}
처음에 이렇게 풀고나서 '다른 사람 풀이 보기'가 있길래 한 번 봤는데
진짜 엄청 깔끔한 코드가 있어서 감탄했다..
그리고 포인트 몇 개를 잡아서 내 코드도 그에 맞춰 수정해보았다!
1. 점수 패턴 배열의 인덱스 관리
2. score 변수 대신 배열을 활용
3. max_element() 함수 사용
4. 3명의 점수 비교해서 answer 배열 만들기
다른 사람 코드 하나에 이렇게 배울 점이 많다니 놀랍기도 하고
여태 다른 사람 코드는 잘 안 본 내 자신도 놀랍고
앞으로는 자주 봐야겠다..!
Modified CODE
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> answerPattern_1 = {1, 2, 3, 4, 5};
vector<int> answerPattern_2 = {2, 1, 2, 3, 2, 4, 2, 5};
vector<int> answerPattern_3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
vector<int> score(3);
for(int i=0; i<answers.size(); i++)
{
if (answers[i] == answerPattern_1[i % answerPattern_1.size()])
score[0]++;
if (answers[i] == answerPattern_2[i % answerPattern_2.size()])
score[1]++;
if (answers[i] == answerPattern_3[i % answerPattern_3.size()])
score[2]++;
}
int max_score = *max_element(score.begin(), score.end());
for(int i=0; i<3; i++)
{
if(max_score == score[i])
answer.push_back(i+1);
}
return answer;
}