문제: 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예
prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]
입출력 예 설명
1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> prices) {
    vector<int> answer;
    int size = prices.size();
    
    for(int i = 0; i<size; i++) {
        int time = 0;
        for(int j= i+1; j<size; j++) {
            time ++;
            
            if(prices[j] < prices[i] || j==size-1) {
                answer.push_back(time);
                break;
            }
        }
    }
    answer.push_back(0);
    
    return answer;
}

 

출처: https://school.programmers.co.kr/learn/courses/30/lessons/42584

문제: 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

 

내 풀이
#include <vector>
#include <iostream>
#include <list>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
    
    /*
    현재값 = 다음값 : 다음값 한개 증가 
    현재값 != 다음값 : push_back
    */
    
    int pt = 0;
    int next = 1;
    
    answer.push_back(arr[0]);
    for(int i = 1; i<arr.size(); i++) {
        if(arr[pt] == arr[i]) {
        }
        else {
            pt = i;
            answer.push_back(arr[i]);
        }
        
    }
    
    return answer;
}

간단한 풀이

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

vector<int> solution(vector<int> arr) 
{

arr.erase(unique(arr.begin(), arr.end()), arr.end());

    arr.erase(unique(arr.begin(), arr.end()),arr.end());

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

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

문제: 정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

내 풀이
#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    vector<int> answer;
    int odd_size = 0, even_size = 0; 
    
    for(int i = 0; i<num_list.size(); i++) {
        if( (num_list[i]% 2) == 0) {
            even_size++;
        } 
        else {
            odd_size++;
        }
    }
    
    answer.push_back(even_size);
    answer.push_back(odd_size);
    return answer;
}

 

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120824

문제: 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

풀이: 

내가푼거

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> dot) {
    int answer = 0;
    /*
    1.둘의 부호가 같은경우 : 3사분면 또는 1사분면
    2.둘의 부호가 다른 경우
    2-1. x음 y양: 2사분면
    2-2. x양 y음: 4사분면
    */
    
    int x = dot.front();
    int y = dot.back();
    
    if((x*y)>0) {
        if(x>0) {
            answer = 1;
        }
        else {
            answer = 3;
        }
    }
    else if( (x>0)&(y<0)) {
        answer = 4;
    }
    else {
        answer = 2;
    }
    
    return answer;
}

더 간단히 푸는거

#include 
#include 

using namespace std;

int solution(vector<int> dot) {

return dot[0] >0 ? (dot[1]>0 ? 1 :4) : dot[1]<0 ? 3:2); }

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120841

문제: 문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

코딩

#include <string>
#include <vector>

using namespace std;

string solution(string my_string) {
    string answer = "";
    int j = 0;
    string cpy_string;
    for(int i = my_string.size()-1; i>=0; i--) {
        cpy_string[j] = my_string[i];
        answer.push_back(cpy_string[j++]);
    }
    
    
    return answer;
}

 

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120822

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

내 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<string> strlist) {
    vector<int> answer;
    
    for(int i = 0; i<strlist.size(); i++){
        answer.push_back(strlist[i].size());
    }
    return answer;
}

 

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120854

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.



n명을 7조각으로 나눈 
몫 = n/7 판
 나머지가 있으면 +1 판 없으면 끝


#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    static int pan = 1;
    
    
    if(n<=7) {
        answer = 1;
    } 
    else {
        pan = n/7;
        if( (n%7) == 0) {
            answer = pan;
        }
        else {
            answer = pan +1;
        }
    }    
    return answer;
}

 

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120814

문제:머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

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

using namespace std;

int solution(vector<int> array, int height) {
    int answer = 0;
    sort(array.begin(), array.end()); //오름차순 정렬
    
    for(int i = 0; i< array.size(); i++) {
        if(array[i] > height) {
            answer++;            
        }
    }
    return answer;
}

 

C++ 범위기반 for문 


    for (auto element: array) {
        answer += (element> height);
    }

설명: 루프는 각 array의 요소를 반복, element에 선언된 변수에 현재 배열 요소의 값을 할당.
참고1: 비교군이 같아야 형변환 에러가 나지 않으므르 자료형을 맞추거나, auto 키워드를 사용할것
참고2: 성능을 고려하여 const auto로 설정하면 읽기 전용 모드로 설정되어 성능이 빨라진다
참고3: 위의 문제와 같이 단순히 count만 하는것이 아니라, 배열의 값을 복사하려면
for(const auto & element : array) 해주면 된다.

int array[5] = { 1,2,3,4,5};
for (const auto& element: array) 
        std::cout << element << ' ';

출처: 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/120585

+ Recent posts