728x90
반응형
문제 : https://programmers.co.kr/learn/courses/30/42840
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers) {
// 벡터를 이렇게 초기화할 수 있다~ 라고 알면 된다.
vector<int> a_answer({ 1, 2, 3, 4, 5 });
vector<int> b_answer({ 2, 1, 2, 3, 2, 4, 2, 5 });
vector<int> c_answer({ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 });
vector<vector<int>> students; // 세 사람의 제출 답안을 묶음.
vector<int> answer;
// 문제 정답으로 가장 최대로 맞춘 사람의 인덱스가 들어감.
// 맞춘 횟수가 동일하면 공동 순위로 함께 들어감 -> 2, 2, 2 / 0, 0, 0, -> 답 : 1,2,3 / 1,2,3
int ac_idx = 0, ac[3] = { 0, }; // 정답 맞춘 갯수, 카운트 (0:a/2:c)
students.push_back(a_answer);
students.push_back(b_answer);
students.push_back(c_answer);
for(auto it : students)
{
for(int i=0; i<answers.size(); i++) // 문제 문항수 만큼 반복하면서
{
// 하나하나 맞는지 대입한다. 반복되는 패턴이므로 나머지 연산자 활용
if(answers[i] == it[i%it.size()])
ac[ac_idx]++;
}
if(answer.size() == 0) // 첫 대입은 무조건 대입.
answer.push_back(ac_idx+1);
else if(ac[answer.back()-1] < ac[ac_idx]) // 이전 대입의 카운트보다 크면
{
// 교체
answer.pop_back();
answer.push_back(ac_idx+1);
}
else if(ac[answer.back()-1] == ac[ac_idx]) // 이전 대입과 같으면
answer.push_back(ac_idx+1); // 추가 (공동 순위 개념)
ac_idx++; // 다음 카운트랑 비교를 위해
}
return answer;
}
|
cs |
인기있는, 다른 사람의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> one = {1,2,3,4,5};
vector<int> two = {2,1,2,3,2,4,2,5};
vector<int> thr = {3,3,1,1,2,2,4,4,5,5};
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> they(3);
for(int i=0; i<answers.size(); i++) {
if(answers[i] == one[i%one.size()]) they[0]++;
if(answers[i] == two[i%two.size()]) they[1]++;
if(answers[i] == thr[i%thr.size()]) they[2]++;
}
int they_max = *max_element(they.begin(),they.end());
for(int i = 0; i< 3; i++) {
if(they[i] == they_max) answer.push_back(i+1);
}
return answer;
}
|
cs |
내가 푼거에 비해서 깔끔하다 나는 반복문 투성인데 여기에서는 answers를 기준으로 한번만 돌았다.. ㅋㅋㅋ max_element 함수로 최대 값을 구한 뒤, 최대 값과 같으면 순서대로 다 집어넣는다. 5졌습니다..
728x90
반응형
'프로그래밍응용 > 오답노트' 카테고리의 다른 글
카카오톡 비밀지도 (0) | 2021.02.18 |
---|---|
SQL1 (0) | 2021.02.15 |
벡터 복사 및 sort 이용 (0) | 2021.02.13 |
우선순위 큐 이용한 문제 ㅋㅋ (0) | 2021.02.13 |
stack 주식 가격 (0) | 2021.02.13 |