Kiki Devlog

모의고사 (완전탐색) 본문

Coding Test/프로그래머스

모의고사 (완전탐색)

kimkiki 2022. 1. 1. 23:39
728x90
#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    int maxAnsNum = -1;
    vector <vector<int>> students = {
        vector <int> ({1,2,3,4,5}),
        vector <int> ({2,1,2,3,2,4,2,5}),
        vector <int> ({3,3,1,1,2,2,4,4,5,5}),
    };
    
    for(int i = 0; i< students.size();i++){
        
        //채점
        int ansNum = 0;
        for(int j = 0; j < answers.size();j++){    
            int curStdAnswer = j % students[i].size(); //학생답 계속 rotation으로 넣기
            if ( answers[j] == students[i][curStdAnswer]){
                int num = j % students.size();
                ansNum++;
            }   
        }
        
        // 답 가장 많이 맞췄다면 정답 배열에 넣기
        int stdNum = i+1;
        if (ansNum > maxAnsNum){
            maxAnsNum = ansNum;
            answer.clear();
            answer.push_back(stdNum);
        }
        else if(ansNum == maxAnsNum){
            maxAnsNum = ansNum;
            answer.push_back(stdNum);
        }
    }
    
    return answer;
}

비슷한 이름의 배열을 여러가지 만들어 써서 풀다가도 어느 배열을 사용해야 할지 헷갈렸음.

학생의 답을 계속 돌려가며 사용하려고 했는데, 그걸 나머지를 사용해서 현재 학생 답을 얻어내는 부분의 코딩에서 계속 문제가 생겼음. (21줄. 계속 이상한 배열을 사용해서 나눗셈을 이상한 값으로 적용시킴 여기서만 시간 80퍼 쓴거같음) 

 

1. 배열 이름을 잘 짓기

2. 코딩 전 전체 틀을 먼저 생각해보기

 

 

 

// 기타 느낀점

난 이중 for 문으로 두번째 for에서 사람들을 한명씩 채점했는데, 높은 순위 풀이법을 보니 그냥 학생 수만큼

if 문을 3번 돌려서 한번에 채점을 하는(1번문제에 대해 모든학생 채점->다음 2번문제...) 방법도 학생수가 적으면 더 코드가 깔끔해지고 괜찮을 것 같음. 

근데 학생 수의 추가를 고려하면 내 코드가 더 수정하기 쉬울거 같다!

 

이것도 최소 1년전에 푼 문제 다시 푼건데 예전보다는 깔끔하게 풀었다. 그치만 더 공부해보면 더 깔끔하게 풀수 있을것 같아서 왠지 더 줄여보고 싶어짐. 다시 줄여봐야지. 특히 answer 베열 정답자 집어넣는 부분 고치고 싶다 

Comments