알고리즘 문제풀이
[Programmers] 프로그래머스 Lv.1 모의고사 문제풀이(C++)
도리컴
2023. 11. 21. 21:12
반응형
핵심 : 반복문 1번 돌려서 완전탐색
코테 스터디 문제풀이!
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
49
50
51
52
53
54
55
56
|
#include <string>
#include <vector>
#include <iostream>
using namespace std;
/*
<문제>
1번 수포자가 찍는 방식 : 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식 : 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식 : 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번부터 마지막 문제까지 정답 순서 배열 answer -> 가장 많이 맞춘 사람 배열에 담아 return
시험문제 최대 <= 10000
정답은 1, 2, 3, 4, 5중 하나
여럿이 나오면, 오름차순 정렬
<풀이>
반복문 1번에 고고
2번사람 : [2, 1, 2, 3, 2, 4, 2, 5] 반복
3번사람 : [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] 반복
i번째에서
answer[i] : 현재 순서의 정답
1번사람체크
2번사람체크
3번사람 체크
1, 2, 3 비교해서 배열에 담기(최대값이 같은 사람들은 오름차순 정렬)
<시간>
O(N)
*/
vector<int> solution(vector<int> answers) {
vector<int> answer;
int one = 0, two = 0, three = 0; //각 수포자 번호
vector<int> seq3 = { 3,3, 1,1, 2,2, 4,4, 5,5 };
vector<int> seq2 = { 2, 1, 2, 3, 2, 4, 2, 5 };
for (int i = 0; i < answers.size(); i++){
if (i % 5 + 1 == answers[i]) one++; //1번 수포자
if (seq2[i % seq2.size()] == answers[i])two++; //2번 수포자
if(seq3[i % seq3.size()] == answers[i])three++; //3번 수포자
}
if (one >= two && one >= three) answer.push_back(1);
if (two>= one && two >= three) answer.push_back(2);
if (three >= two && three >= one) answer.push_back(3);
return answer;
}
|
cs |
반응형