본문 바로가기
PS/programmers

[PS] 프로그래머스 - K번째수 | C++, Python

by spareone 2023. 1. 18.

프로그래머스 K번째수 문제 Write-Up입니다.

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

 

프로그래머스

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

programmers.co.kr


문제의 배열을 추출해 오름차순 정렬 후 조건에 맞게 원소를 출력하면 됩니다.


1. C++

풀이 1 : 배열 추출 후 정렬하고 원소를 출력합니다.

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

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    for(auto i : commands) {
        vector<int> v;
        for(int j = i[0] - 1; j < i[1]; j++) v.push_back(array[j]);
        sort(v.begin(), v.end());
        answer.push_back(v[i[2] - 1]);
    }
    return answer;
}

풀이 2 : 배열 추출 없이 조건에 맞게 해당 부분배열만 바로 정렬 후 원소를 출력합니다. 이렇게 하면 단일 for문으로만 문제를 해결할 수 있습니다.

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

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    for(auto i : commands) {
        vector<int> v = array;
        sort(v.begin() + i[0] - 1, v.begin() + i[1]);
        answer.push_back(v[i[0] + i[2] - 2]);
    }
    return answer;
}

2. Python

def solution(array, commands):
    return [sorted(array[i[0] - 1:i[1]])[i[2] - 1] for i in commands]

댓글