티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

#include<iostream>
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> dapVector;
    vector<int> compare;
    int dap = 0, s = 0, index = 0;

    //첫번째 수포자 계산
    //1,2,3,4,5,1,2,3,4,5...
    for (int i = 0; i < answers.size(); i++) {
        dap++;
        if (dap == answers[i]) {
            s++;
        }

        if (dap == 5) {
            dap = 0;
        }
    }
    compare.push_back(s);

    s = 0;

    //두번째 수포자 계산
    dapVector = { 2,1,2,3,2,4,2,5 };
    for (int i = 0; i < answers.size(); i++) {
        if (dapVector[index] == answers[i]) {
            s++;
        }
        if (index == dapVector.size() - 1) {
            index = 0;
        }
        else {
            index++;
        }
    }

    compare.push_back(s);

    s = 0;
    index = 0;
    //세번째 수포자 정답 패턴을 입력하기 위해 vector 초기화
    dapVector.clear();

    //세번째 수포자 계산
    //3,3,1,1,2,2,4,4,5,5,3,3,1,1,2,2,4,4,5,5...
    dapVector = { 3,3,1,1,2,2,4,4,5,5 };
    for (int i = 0; i < answers.size(); i++) {
        if (dapVector[index] == answers[i]) {
            s++;
        }
        if (index == dapVector.size() - 1) {
            index = 0;
        }
        else {
            index++;
        }
    }

    compare.push_back(s);

    //첫번째가 가장 큰경우
    if ((compare[0] > compare[1]) && (compare[0] > compare[2])) {
        answer.push_back(1);
    }
    //두번째가 가장 큰경우
    else if ((compare[1] > compare[0]) && (compare[1] > compare[2])) {
        answer.push_back(2);
    }
    //세번째가 가장 큰경우
    else if ((compare[2] > compare[0]) && (compare[2] > compare[1])) {
        answer.push_back(3);
    }
    //첫번째 두번째 세번째 모두 같은 경우
    else if ((compare[0] == compare[1]) && (compare[0] == compare[2]) && (compare[1] == compare[2])) {
        answer.push_back(1);
        answer.push_back(2);
        answer.push_back(3);
    }
    else {
        //첫번째와 두번째가 같은 경우
        if (compare[0] == compare[1]) {
            answer.push_back(1);
            answer.push_back(2);
        }
        //첫번째와 세번째가 같은 경우
        else if (compare[0] == compare[2]) {
            answer.push_back(1);
            answer.push_back(3);
        }
        //두번째와 세번째가 같은 경우
        else if (compare[1] == compare[2]) {
            answer.push_back(2);
            answer.push_back(3);
        }
    }

    return answer;
}

Rust로 CPP와 비슷하게 풀어봄

fn solution(answers : Vec<i32>) -> Vec<i32>{
    let mut answer :Vec<i32> = Vec::new();
    let mut dapVector : Vec<i32> = Vec::new();
    let mut compare : Vec<i32> = Vec::new();
    let mut dap : i32 = 0;
    let mut s : i32 = 0;
    let mut index : usize = 0;

    //첫번째 계산
    for i in 0 .. answers.len(){
        dap += 1;
        if dap == answers[i] {
            s += 1;
        }

        if dap == 5 {
            dap = 0;
        }
    }

    compare.push(s);
    s = 0;

    //두번째 계산
    dapVector = [2, 1, 2, 3, 2, 4, 2, 5].to_vec();
    for i in 0 .. answers.len(){

        if dapVector[index] == answers[i] {
            s += 1;
        }

        if index == (dapVector.len() - 1) {
            index = 0;
        }else{
            index += 1;
        }
    }
    compare.push(s);
    s = 0;
    index = 0;

    //세번째 계산
    dapVector = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5].to_vec();
    for i in 0 .. answers.len(){
        if dapVector[index] == answers[i]{
            s += 1;
        }

        if index == (dapVector.len() - 1) {
            index = 0;
        }else{
            index += 1;
        }
    }
    compare.push(s);

    //1. 첫번째가 가장 큰 경우
    if (compare[0] > compare[1]) && (compare[0] > compare[2]){
        answer.push(1);
    //2. 두번째가 가장 큰경우
    }else if (compare[1] > compare[0]) && (compare[1] > compare[2]){
        answer.push(2);
    //3. 세번째가 가장 큰경우
    }else if (compare[2] > compare[0]) && (compare[2] > compare[1]) {
        answer.push(3);
    //4. 첫번째 두번째 세번째 모두 같은경우
    }else if (compare[0] == compare[1]) && (compare[0] == compare[2]) && (compare[1] == compare[2]){
        answer.push(1);
        answer.push(2);
        answer.push(3);
    }else{
        //5. 첫번째와 두번째가 같은 경우
        if compare[0] == compare[1]{
            answer.push(1);
            answer.push(2);
        //6. 첫번째와 세번째가 같은 경우
        }else if compare[0] == compare[2]{
            answer.push(1);
            answer.push(3);
        //7. 두번째와 세번째가 같은 경우
        }else if compare[1] == compare[2]{
            answer.push(2);
            answer.push(3);
        }
    }
    answer
}

fn main() {
    let mut answers : Vec<i32> = Vec::new();
    let mut result : Vec<i32> = Vec::new();
    
    answers = [1,3,2,4,2].to_vec();

    result = solution(answers);

    for i in 0 .. result.len(){
        print!("{}", result[i]);
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함