728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 : 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({ 12345 });
    vector<int> b_answer({ 21232425 });
    vector<int> c_answer({ 3311224455 });
    
    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

+ Recent posts