https://school.programmers.co.kr/learn/courses/30/lessons/131704

 

프로그래머스

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

programmers.co.kr

문제 내용 :

1.택배차가 원하는 택배번호 순서대로 택배를 실어야 함(인자값 : vector<int> order)

2.메인 컨테이너 벨트에 오름차순으로 택배가 존재하며,제일 앞에 택배만 꺼낼 수 있음

3.택배차에 짐을 실을때 원하는 택배가 아닌경우 서브 컨테이너 벨트에 택배를 보관할수 있음,

3-1.서브컨테이너 벨트는 제일 마지막에 쌓은 택배만 꺼낼 수 있음

4.두 벨트 에서 원하는 택배를 못 실을 경우 택배차는 출발함

이때 택배차에 몇개의 택배를 실을수 있는지 최대값을 찾는 문제 


풀이 : 

문제내용1 -> queue 자료구조에 적합 (순서대로 작업함에 따라 택배를 실고 삭제할때 앞에 원소 삭제하기가 용이함)

문제내용2 -> queue 자료구조에 적합

문제내용3 -> stack 자료구조에 적합

 

택배차의 queue<int> order를 순회하며 메인벨트(queue)와 서브벨트(stack)을 체크하며 answer의 값을 증가,

두 벨트에서 짐을 다 못 실을 경우 서브벨트에 택배를 쌓는다.

만약 메인벨트에서 더이상 서브벨트로 넣을 택배가 없으면  반복문에서 탈출하여 그대로 answer를 반환


코드 영역

더보기
#include <string>
#include <vector>
#include <queue>
#include <stack>

using namespace std;

//1.메인벨트와  적재 박스 비교
//2.같은경우 벨트와 적재박스 큐에서 제외 후 ,answer증가
//3.다른경우 서브벨트 top과 비교해서 같은경우 stack과queue에서 제외후 answer증가
//3.둘다 다른경우 서브벨트에 적재

int solution(vector<int> order) {
    int answer = 0;

    queue<int> q_order; // 기사님이 원하는 택배 순서
    queue<int> main_belt;// 메인 컨테이너벨트
    stack<int> sub_belt; // 서브 컨테이너벨트
    
    //택배차의 원하는 택배순서를 queue로 저장
    for (int i = 0; i < order.size(); i++)
    {
        main_belt.push(i + 1); 
        q_order.push(order[i]); 
    }

    while (!q_order.empty())
    {
        //메인 벨트의 택배와 택배차의 order list와 비교
        if (!main_belt.empty() && q_order.front() == main_belt.front())
        {
            answer++;
            q_order.pop();
            main_belt.pop();
        }
        //서브 벨트의 택배와 택배차의 order list와 비교
        else if (!sub_belt.empty() && q_order.front() == sub_belt.top())
        {
            answer++;
            q_order.pop();
            sub_belt.pop();
        }
        //메인 벨트의 서브 벨트 둘다 택배가 없는경우
        else
        {
            //메인 벨트에 택배가 있으면 서브벨트에 해당 택배를 보관 후 다시 순회
            if (!main_belt.empty())
            {
                sub_belt.push(main_belt.front());
                main_belt.pop();
            }
            //메인 벨트에 택배가 없으면 더이상 할 수 없으므로 탈출후 반환
            else { return answer; }
        }

    }

    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV1.둘만의 암호  (0) 2023.10.26
LV1.체육복  (0) 2023.10.26
LV2.롤케이크 자르기  (0) 2023.10.26
LV2.숫자 변환하기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26

https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

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

programmers.co.kr


문제 내용 : 두 사람한테 [토핑 종류의 갯수가 똑같이 분배되게 하는 방법의 수]를 찾는 문제

ex) A : 1 ,2 ,4  / B : 2, 3 ,4 => 토핑 종류는 다르지만 토핑의 종류의 갯수가 같으므로 맞는 경우

ex) A : 1,1,2,3, / B : 1,2,2,2,3 =>토핑 종류 갯수 같음

 

우선 토핑 갯수 및 종류에 상관 없기에 중복을 허용하지 않으면 레드-블랙트리 기반으로하는 map 자료 구조를 사용하였다.

map<int,int> // 토핑종류 , 토핑 갯수

 


첫번째 접근 방법 : A한테 n개 ,B한테 [전체 - n개] 나눠주기

지문 그대로 나눠주고 그 결과가 맞는지를 체크하기로 했다.
하지만 이렇게 되면 topping을 순회하는 반복문 1개 ,반복문 안에서 나눠주는 반복문이 2개로 loop가 토핑갯수 하나마다 loop수가 제곱이되는 상황이 발생이 되어 시간복잡도에 문제가 발생


두번째 접근 방법 : A한테 topping을 다 몰아준 후 , 반복문이 한번 loop할때마다 B한테 하나씩 주기

이렇게 되면 인자값으로 주는 토핑 배열 길이만큼만 순회하면 모든 방법을 알 수 있다.


코드 영역

더보기
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

int solution(vector<int> topping) {
    int answer = 0;
    
    //A라는 사람의 topping map
    map<int,int>  map_A;
    //A의 빵에 모든 토핑을 올려놓기
    for (int elements : topping)
    {
        map<int, int> ::iterator iter = map_A.find(elements);

        if (iter != map_A.end()) iter->second++;
        else  map_A.insert({ elements,1 });
    }
    
     //A라는 사람의 topping map
    map<int, int> map_B;
    
     //토핑의 갯수만큼 순회를 하며 A의 토핑을 B한테 하나씩 주며 체크하기
    for (int i = 0; i < topping.size(); i++)
    {
        int pivot = topping[i];
 
        //map_A의 원소 제거 (B한테 하나 주기)
        map<int, int> ::iterator iter = map_A.find(pivot);
        if (iter != map_A.end())
        {
            iter->second--;
            if (iter->second <= 0) map_A.erase(iter);
        }

        //map_B의 원소 추가 (A한테서 받은 토핑 추가하기)
        iter = map_B.find(pivot);
        if (iter != map_B.end()) iter->second++;
        else  map_B.insert({ pivot,1 });

        //각 토핑의 map갯수가 같은지 체크 
        if (map_A.size() == map_B.size()) answer++;
    }

    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV1.체육복  (0) 2023.10.26
LV2.택배상자  (0) 2023.10.26
LV2.숫자 변환하기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26
LV.1 같은 숫자는 싫어  (0) 2023.06.09

https://school.programmers.co.kr/learn/courses/30/lessons/154538

 

프로그래머스

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

programmers.co.kr


첫번째 접근 방법 : bfs(재귀)로 접근

문제에서 원하는건 [ 최소 연산 횟수를 return ]이기 때문에 bfs로 접근하였고, bfs를 사용하기에 queue 자료구조를 사용하였다, 인자값이 작아서 경우의수가 적을경우에는 원하는 값이 나왓지만 인자값이 엄청 큰 경우 재귀함수 반복횟수 초과 및 시간 복잡도 문제가 발생했다.

 

재귀함수 장/단점 간단 정리

더보기

[재귀함수 장점] -> 가독성 Up

1.변수의 사용을 줄일 수 있다.

2.알고리즘 자체가 재귀함수에 어울리는 경우 ex)Tree 

[재귀함수 단점] -> 시간증가 , 스택오버플로우 발생 

1.함수를 호출이 반복적으로 일어나기에 시간이 반복문보다 더 걸릴 수 있다.

2.함수 호출시마다 스택영역에 메모리가 쌓여서 결국 스택 오버 플로우 발생이 된다.

 

두번째 접근 방법 : DP로 접근하기

인자값이 크면 클수록 경우의수가 너무 많아져서 DP를 사용

x에 3가지 방법의 계산 후 계산값을 저장할 배열이 필요하므로 [ y +1 ] 만큼 배열을 만든뒤 -1로 채운다.

-1로 채운 이유는 해당 index에 접근 안했다는 표시와 y값을 못구하는경우 -1을 return하기 위해서다.

각각의 방법으로 구한 계산 값을 index로 취급하고 , 배열[index]에 계산한 횟수를 저장한다.

 

ex) x=10 , y=40 ,n=5 인경우

dp[10] dp[11] dp[12] dp[13] dp[14] dp[15] ... dp[20] ... dp[30]
0(Start) -1 -1 -1 -1 1(10+5)   1(10*2)   1(10*3)

이런식으로 dp에 저장한다. 그리고 연산 중에 겹치는 값이 있을텐데  최소의 연산 횟수를 구하는것이기에

저장하려는 계산값과 저장되있는 계산값중 최소인것을 선택하여 저장하게하면된다.(최소 연산 횟수가 아닌경우 할필요가 없어짐)

 

이렇게 배열의 길이만큼 순회하면 원하는 값을 도출 할 수 있다.

 

코드영역

더보기
#include <string>
#include <vector>
#include <array>
#include <algorithm>
#include<cmath>
using namespace std;

int solution(int x, int y, int n) 
{
    int answer = 0;

    vector<int> dp;
    for (int i = 0; i < y + 1; i++) { dp.push_back(-1); }//dp 배열 data값을 전부 -1 초기화

    dp[x] = 0; // 초기 시작값 설정
   
    for (int i = x; i < y + 1; i++)
    {
        //해당 dp[i]에는 접근하지 않았기에 넘어감
        if (dp[i] == -1) continue;

        if (i * 2 <= y)
        {
            //계산한 값이 -1이면 접근하지 않았기에 바로 dp에 계산값을 초기화
            if (dp[i * 2] == -1) { dp[i * 2] = dp[i] + 1; }//해당 dp자리에 연산 횟수data가 있는경우 최소값을 골라서 초기화
            else { dp[i * 2] = min(dp[i] + 1, dp[i * 2]); }
        }

        if (i * 3 <= y)
        {
            if (dp[i * 3] == -1) { dp[i * 3] = dp[i] + 1; }
            else { dp[i * 3] = min(dp[i] + 1, dp[i * 3]); }
        }

        if (i + n <= y)
        {
            if (dp[i + n] == -1) { dp[i + n] = dp[i] + 1; }
            else { dp[i + n] = min(dp[i] + 1, dp[i + n]); }

        }
    }
    //dp배열 길이만큼 순회 후 dp[y]에 도달한 연산 횟수 값을 반환 
    return dp[y];
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV2.택배상자  (0) 2023.10.26
LV2.롤케이크 자르기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26
LV.1 같은 숫자는 싫어  (0) 2023.06.09
LV.2 최솟값 만들기  (0) 2023.06.09

https://school.programmers.co.kr/learn/courses/30/lessons/77885

 

프로그래머스

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

programmers.co.kr


첫번째 접근 방법 :  비트연산(XOR) 접근
비트 연산 문제로 파악하여 비트를 쉽게 파악하기 위해 bitset을 사용
2개 이하 다른 비트를 찾기 위해 XOR 비트연산을 이용하여 [1의 갯수 < 2]의 조건을 찾아 정답을 찾음
하지만 인자값으로 큰 숫자가 들어올 경우 XOR을 해야되는 연산 수가 늘어나며 시간 복잡도에서 문제가 발생

두번째 접근 방법 : 각 비트의 규칙을 찾음

2진 숫자(numbers) 2진 변환(answer) 처음보는 0 뒤의 1숫자 index numbers에 더해주는 값
010(2) 011(3) 0(처음 보는 0 뒤에 1이 없음) +2^0
011(3) 101(5) 1(0의 index는 두번째,2-1 =1) +2^1
100(4) 101(5) 0(처음 보는 0 뒤에 1이 없음) +2^0
101(5) 110(6) 0(0의 index는 첫번째, 1-1=0) +2^0
110(6) 111(7) 0(처음 보는 0 뒤에 1이 없음) +2^0
111(7) 1011(11) 2(0의 index는 세번째 3-1=2) +2^2

규칙을 보면 numbers의 비트들에서 오른쪽에서 처음으로 보는 0 뒤의 1숫자의 index를 2제곱해준 값을
numbers에 더해주면된다. 그렇게하면 비트는 무조건 2이하로 바뀌게 되는 조건을 만족한다.

 

ex)1 010(2)의 [처음보는 0뒤에 1 index]는 0이고, 그 값을 2^n에 대입하면

010 + 2^0 = 011(3) 값이 나온다.

ex2)011(3)의  [처음보는 0뒤에 1 index]는 1이고, 그 값을 2^n에 대입하면

011 + 2^1 = 101(5)  값이 나온다.


코드영역

더보기
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

vector<long long> solution(vector<long long> numbers) {
    vector<long long> answer;
    
    for(long long i =0; i < numbers.size() ; i++)
    {
        long long number = numbers[i];
        long long index_0 = 0; //처음보는 0의 index
        
        //number를 이진법으로 변환하며 처음 만나는 0 찾기
        while(number > 0)
        {
            if(number % 2 == 0) { break; } // 해당 이진법의 자리가 0인경우 탈출
            index_0++; //0이 아닌경우 index가 증가함
            number *= 0.5;
        }

        //0뒤의 숫자1의 index를 알아야하기 때문에 -1을 계산
        if(index_0 > 0) { index_0 -= 1;} 

        //number에 더해줄 2^count 를 구함
        long long sum = 1;
        for(long long i =0; i< index_0; i++) {  sum *= 2;}
        
        answer.push_back(numbers[i] + sum);
    }
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV2.롤케이크 자르기  (0) 2023.10.26
LV2.숫자 변환하기  (0) 2023.10.26
LV.1 같은 숫자는 싫어  (0) 2023.06.09
LV.2 최솟값 만들기  (0) 2023.06.09
LV.1 내적  (0) 2023.06.09

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

프로그래머스

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

programmers.co.kr

더보기 주의 , 코드에 관한 설명이 간략히 있지만 코드 내용 원문이 있으니 주의 할 것

 

<나의 풀이>

더보기

현재 index와 다음 index 값을 비교해서 다를경우,

answer에 현재 index값을 저장 후 roop를 진행한다.

index+1 했을때 arr의 size보다 크거나 같을경우 마지막 숫자를 answer에 추가하면서

반복문을 탈출한다.

#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
	
    //arr의 갯수만큼 roop
    for(int i = 0 ; i< arr.size() ; i++)
    {
    	//배열이 범위를 벗어나지 않게 하기위한 조건문
        if( i+1 >= arr.size())
        {
            answer.push_back(arr[i]);
            break;
        }
        
        //현재 index와 다음 index가 다를경우 값을 저장 
        if(arr[i] != arr[i+1])
        {
            answer.push_back(arr[i]);
        }
    }
    
    return answer;
}

<다른사람의 풀이>

더보기

algorithm헤더의 unique함수와 std::vector의 erase 함수 두개를 활용하면 해당 배열의 원소 중 중복값을 없앨수 있다.

 

unique 함수 : 배열에서 원소를  앞에서부터 채워나가며 채운 함수중에 중복이 있으면 뒤로 보내는 함수이다.

unique함수는 중복되지 않은 값들을 나열 한뒤 남은 중복 원소의 첫번째 iterator 값을 반환, 

unique함수를 사용하기전에 sort 함수를 하여 정렬할 필요가 있다.

 

(unique함수로부터 반환된 iterator , 배열의 끝  iterator) 범위를 eraser함수하면
함수 고유의 값들만 남아있다. 

 

하지만 이 문제는 함수의 순서를 바꾸지 말라고 하였기에 sort함수를 사용하지 않고 바로 unique함수를 활요한 것이다.

 

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

vector<int> solution(vector<int> arr) 
{
	//vector 에서 중복되는 함수들을 한곳에 모아 삭제할때 쓰는 구조다.
    arr.erase(unique(arr.begin(), arr.end()),arr.end());

    vector<int> answer = arr;
    return answer;
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV2.숫자 변환하기  (0) 2023.10.26
LV2.2개 이하로 다른 비트  (0) 2023.10.26
LV.2 최솟값 만들기  (0) 2023.06.09
LV.1 내적  (0) 2023.06.09
LV.1 없는 숫자 더하기  (0) 2023.06.09

https://school.programmers.co.kr/learn/courses/30/lessons/12941

 

프로그래머스

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

programmers.co.kr

더보기 주의 , 코드에 관한 설명이 간략히 있지만 코드 내용 원문이 있으니 주의 할 것

 

<나의 풀이>

더보기

2개의 벡터가 주어지는데 각 벡터의 원소들을 곱하고서 그 합의 최솟값을 구하는 문제이다.
즉, (첫번째 작은 값 * 첫번째 큰 값) + (두번째 작은 값 * 두번째 큰 값) + .... = 최솟값 이 나온다 

 

2개의 벡터에 하나는 오름차순으로 정렬 하나는 내림차순으로 정렬한뒤

반복문을 이용하여 작은값 * 큰값을 roop할 수 있게 해주면된다.

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

int solution(vector<int> A, vector<int> B)
{
    int answer = 0;
    
    sort(A.begin(),A.end());
    sort(B.begin(),B.end());
    reverse(B.begin(),B.end());

    
    //양쪽 벡터에서 가장 작은 숫자 하나와 가장큰숫자를 골라서 곱한다.
    
    for(int i=0; i< A.size(); i++)
    {
        answer += A[i] * B[i];
    }

    return answer;
}

<다른사람의 풀이>

더보기
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
int solution(vector<int> A, vector<int> B){
    sort(A.begin(),A.end());  sort(B.rbegin(),B.rend());
    return inner_product(A.begin(),A.end(),B.begin(),0);
}

 익숙하지 않은 명령어들이 있어서 정리하려고 가져왔다.


*inner_product();

numeric 헤더에 포함된 명령어이며, 내적을 구할때 사용하는 명령어이다.

inner_product(시작값A,마지막값A,시작값B,초기값) 으로 사용된다. 

예제 코드 및 추가적인 내용은 밑에 링크 확인

https://01149.tistory.com/14

 

STL 범용 수치 알고리즘 (accumulate , inner_product)

//accumulate 함수의 원문 #include template T accumulate (InputIterator first, InputIterator last, T init); template T accumulate (InputIterator first, InputIterator last, T init, BinaryOperation binary_op); accumulate(구간의 시작 값, 구간의

01149.tistory.com


*rbegin(),rend()

std::vector 자료형의 내림차순 정렬이 필요할때 , rbegin, rend 함수를 활용하면 가독성 좋은 코드를 짤 수 있다. 

예제 코드 및 추가적인 내용은 밑에 링크 확인

https://01149.tistory.com/15

 

std::vector (reverse_iterator,rbegin(),rend(),역방향반복자,내림차순정렬)

reverse_iterator(역방향 반복자) : 반복자(iterator)와는 정반대로 동작하는 반복자 ++,-- 연산자를 이용하여 iter를 변경하고 그랬는데 반대로 동작하게된다. std::vector에서 자주 사용해온 begin(), end() 명

01149.tistory.com

 

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV2.2개 이하로 다른 비트  (0) 2023.10.26
LV.1 같은 숫자는 싫어  (0) 2023.06.09
LV.1 내적  (0) 2023.06.09
LV.1 없는 숫자 더하기  (0) 2023.06.09
LV.1 공원산책  (0) 2023.06.08

https://school.programmers.co.kr/learn/courses/30/lessons/70128

 

프로그래머스

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

programmers.co.kr

더보기 주의 , 코드에 관한 설명이 간략히 있지만 코드 내용 원문이 있으니 주의 할 것

 

<나의 풀이>

더보기
문제가 각 좌표의 내적을 구하는 것이기 때문에 그냥 내적 구하는 식에 반복문만 추가하면 쉽게 풀 수 있다. 
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> a, vector<int> b) {
    int answer = 0;
    
    for(int i=0; i < a.size() ; i++)
    {
        answer += a[i] * b[i];
    }
    
    return answer;
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV.1 같은 숫자는 싫어  (0) 2023.06.09
LV.2 최솟값 만들기  (0) 2023.06.09
LV.1 없는 숫자 더하기  (0) 2023.06.09
LV.1 공원산책  (0) 2023.06.08
[LV2] 귤 고르기  (0) 2023.05.31

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

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

programmers.co.kr

더보기 주의 , 코드에 관한 설명이 간략히 있지만 코드 내용 원문이 있으니 주의 할 것

 

<나의 풀이 (비추천)>

더보기

0~9 까지의 숫자중 nuebers vector에 없는 원소를 다 더하는 문제다.

 

0.사전준비

0-1. 0~9의 list 만들기

0-2.numbers를 오름차순으로 정렬하기

 

1.list와 nubers의 원소를 비교하여 없는 원소 합 구하기

1-1.list와 number의 원소값이 다른경우 list의 현재 index값을 answer에 더한다.

1-2.list의 index만 증가시키고 다시 비교 후 원소값이 같지 않으면 1-1 반복, 같은경우 반복문을 진행

1-3.numbers의 index가 사이즈와 같거나 큰 경우 list와 비교하지 않은 원소들을 전부 answer에 더한다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
    vector<int> list = {0,1,2,3,4,5,6,7,8,9};
    
    sort(numbers.begin(),numbers.end());
    
    for(int i=0 , j=0; i< list.size() ; i++,j++)
    {
        if(j >= numbers.size())
        {
           answer += list[i];
            continue;
        }
        
        while(list[i] != numbers[j])
        {
            answer += list[i];
            i++;
        }
    }
    
    return answer;
}

<다른사람의 풀이>

더보기

숫자의 범위는 0~9까지 변동이 없기 때문에 총합은 45로 고정되어있다.
numbers에서 총합45를 하나씩 빼면 남는 숫자는 numbers의 제외된 숫자의 총합이기 때문에 이렇게 간단히 쓸수있다.

나의 풀이는 각 어떤 원소가 남이있는지에 중점을 두다 보니 이렇게 코드를 짯다. 하지만 원하는건 제외된 숫자의 총합이기 떄문이다. 다음에 문제를 풀때는 원하는 값이 무엇인지 더욱 생각해야될듯하다. 

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> numbers) {

    int answer = 45;

    for (int i = 0 ; i < numbers.size() ; i++)
        answer -= numbers[i];

    return answer;
}

 

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

LV.2 최솟값 만들기  (0) 2023.06.09
LV.1 내적  (0) 2023.06.09
LV.1 공원산책  (0) 2023.06.08
[LV2] 귤 고르기  (0) 2023.05.31
[LV1] 대충 만든 자판  (0) 2023.05.28

+ Recent posts