※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소입니다.
https://programmers.co.kr/learn/courses/30/lessons/42748
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
3.1 주석 없는 코드
3.2 주석 있는 코드
3.3 테스트 코드
4. 결과
1. 문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 |
|
문제!!
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. |
제한사항
|
예시
array | commands | return |
[1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 3] |
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
|
2. 문제풀이
풀이라고 적기도 민망하네요. 저는 간단하게 commands에서 자르라는 부분을 임시 vector<int>에다가 옮겼습니다. 이후 정렬을하여 원하는 부분을 answer에 추가하는 형식으로 문제를 풀었습니다. 소스코드를 확인해주세요. |
3. 소스코드
3.1 주석없는 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> array1, vector<vector<int>> commands) {
vector<int> answer;
for (int i = 0; i < commands.size(); i++){
vector<int> temp;
for (int j = commands[i][0] - 1; j < commands[i][1]; j++)
temp.push_back(array1[j]);
sort(temp.begin(), temp.end());
answer.push_back(temp.at(commands[i][2] - 1));
}
return answer;
}
|
3.2 주석있는 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> array1, vector<vector<int>> commands) {
vector<int> answer;
//반환되야되는 세트동안 반복
for (int i = 0; i < commands.size(); i++){
//임시 벡터 생성
vector<int> temp;
//필요한 부분만 임시벡터에 넣음
for (int j = commands[i][0] - 1; j < commands[i][1]; j++)
temp.push_back(array1[j]);
//임시 벡터정렬
sort(temp.begin(), temp.end());
//임시벡터의 index번째를 answer에 넣음
answer.push_back(temp.at(commands[i][2] - 1));
}
return answer;
}
|
3.3 테스트 코드 추가
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
32
33
34
35
|
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> array1, vector<vector<int>> commands) {
vector<int> answer;
//반환되야되는 세트동안 반복
for (int i = 0; i < commands.size(); i++){
//임시 벡터 생성
vector<int> temp;
//필요한 부분만 임시벡터에 넣음
for (int j = commands[i][0] - 1; j < commands[i][1]; j++)
temp.push_back(array1[j]);
//임시 벡터정렬
sort(temp.begin(), temp.end());
//임시벡터의 index번째를 answer에 넣음
answer.push_back(temp.at(commands[i][2] - 1));
}
return answer;
}
void print(vector<int> array1, vector<vector<int>> commands, vector<int> answer) {
vector<int> t = solution(array1, commands);
if (t == answer)
cout << "정답" << endl;
else
cout << "틀림 "<< endl;
}
int main(){
print({ 1, 5, 2, 6, 3, 7, 4 }, { {2, 5, 3},{4, 4, 1},{1, 7, 3} }, {5, 6, 3});
return 0;
}
|
4. 결과
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
H-index C++(정렬)[프로그래머스] (0) | 2019.11.26 |
---|---|
가장 큰 수 C++ (정렬)[프로그래머스] (3) | 2019.11.21 |
이중우선순위 큐 C++(힙)[프로그래머스] (0) | 2019.11.19 |
디스크 컨트롤러 C++(힙,우선순위큐)[프로그래머스] (0) | 2019.11.18 |
라면공장 C++(힙, 우선순위큐)[프로그래머스] (0) | 2019.11.17 |
댓글