문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42840
수포자가 수학을 찍는 규칙을 확인해서, 등수를 가려내는 문제이다.
코드를 좀 더 깔끔하게 구현할 수 있을텐데 직관적으로 빠르게 구현하고자 했기 때문에 코드가 다소 난잡하다.
먼저 세 학생의 답안 마킹 방법을 배열로 설정해뒀다.
이어서 맞은 개수와, 학생 index pair를 벡터에 넣고 정렬을 수행했다.
정렬 조건을 만들어주는 bool 함수만 조심해서 구현하고, 문제 조건에 맞게 조건문을 작성해준다.
#include <string> #include <vector> #include<bits/stdc++.h> using namespace std; int fir[10000]; int sec[10000]; int thr[10000]; bool cmp(pair<int, int> a, pair<int, int> b){ //T 면 a가 앞 if(a.second > b.second) return true; else return false; } vector<int> solution(vector<int> answers) { vector<int> answer; for(int i = 0 ; i < 10000 ; i ++){ if(i % 5 == 0) fir[i] = 1; else if(i % 5 == 1) fir[i] = 2; else if(i % 5 == 2) fir[i] = 3; else if(i % 5 == 3) fir[i] = 4; else if(i % 5 == 4) fir[i] = 5; } for(int i = 0 ; i < 10000 ; i ++){ if(i % 2 == 0) sec[i] = 2; else if(i % 8 == 1) sec[i] = 1; else if(i % 8 == 3) sec[i] = 3; else if(i % 8 == 5) sec[i] = 4; else if(i % 8 == 7) sec[i] = 5; } for(int i = 0 ; i < 10000 ; i++){ if(i % 10 == 0 || i % 10 == 1) thr[i] = 3; else if(i % 10 == 2 || i % 10 == 3) thr[i] = 1; else if(i % 10 == 4 || i % 10 == 5) thr[i] = 2; else if(i % 10 == 6 || i % 10 == 7) thr[i] =4; else if(i % 10 == 8 || i % 10 == 9) thr[i] =5; } vector<pair<int, int> > v{ {1,0}, {2,0}, {3,0} } ; for(int i = 0 ; i < answers.size() ; i++){ if(fir[i] == answers[i]) v[0].second++; if(sec[i] == answers[i]) v[1].second++; if(thr[i] == answers[i]) v[2].second++; } sort(v.begin(), v.end(), cmp); if(v[0].second != 0){ if(v[0].second != v[1].second) answer.push_back(v[0].first); else{ if(v[1].second == v[2].second){ answer.push_back(v[0].first); answer.push_back(v[1].first); answer.push_back(v[2].first); } else{ answer.push_back(v[0].first); answer.push_back(v[1].first); } } } sort(answer.begin(), answer.end()); return answer; }
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
카카오 2018 블라인드 테스트: 실패율 C++ (0) | 2019.08.19 |
---|---|
카카오 2018 블라인드 테스트: 오픈채팅방 C++ (0) | 2019.08.19 |
프로그래머스: 완주하지 못한 선수 (C++) (0) | 2019.07.09 |
프로그래머스: 가장 큰 수 (C++) (0) | 2019.07.09 |
프로그래머스: K번째수 (C++) (0) | 2019.07.05 |