★ 국민대학교 경시대회는 반드시 vector를 알아야 합니다.

https://edukoi.tistory.com/73?category=841618 미리 학습하고 예제 문제 풀어보세요 어렵지 않습니다

 

[ 제5회 국민대학교 알고리즘대회 예제1번 ]

[ 제5회 국민대학교 알고리즘대회  ]

 

※ vector 사용법만 알면 쉽게 풀수 있는 문제입니다. 이런 문제 시험에 안나오겠죠?

[ 제5회 국민대학교 알고리즘대회 예제1번 참고 소스 ]

#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
  
   for(int i=0;i<arr.size();i++)
   {
       if(arr[i]!=arr[i+1])
       {
           answer.push_back(arr[i]);
       }
   }
    return answer;
}

 

 

[ 제5회 국민대학교 알고리즘대회 예제2번 ]

[ 제5회 국민대학교 알고리즘대회 예제2번 ]

 

[ 제5회 국민대학교 알고리즘대회 예제2번 ]

 

[ 제5회 국민대학교 알고리즘대회 예제2번 참고 소스 ]

※ 풀이방법은 다양합니다. 아래 소스는 참고용으로 보고 꼭 스스로 풀어보세요

#include<vector>
#include <cstdio>
#include<iostream>
using namespace std;

int solution(int no, vector<int> works)
{
    int answer = 0;
    int k=0;
    for(int c=0;c<works.size();c++)
        {
          for(int e=0;e<works.size()-1;e++)
            {
                if(works[e]<works[e+1])
                {
                 swap(works[e],works[e+1]);
                }
            }
        }
    do{
        if(works[0]<works[1])
        {
            k=1;
        }
        do{
            if(k!=0 && k!=works.size()-1 && works[k]<=works[0])
            {
                k++;
            }
            else
            {
                break;
            }
        }while(1);
        if(k==works.size()-1 && works[k]<=works[0])
        {
            k=0;
        }
        works[k]--;
        no--;
     
    }while(no!=0);
    for(int c=0;c<works.size();c++)
    {
        if(works[c]>0)
        answer = answer + works[c]*works[c];
    }
    return answer;
}

 

Posted by 명문코딩컴퓨터
,