프로그래머스 k번째 수
본문 바로가기
알고리즘 모음집/New 알고리즘

프로그래머스 k번째 수

by KyeongMin 2020. 8. 20.
728x90
반응형

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

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

1번 소스

#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
	vector<int> answer;
	
	for (int  ci= 0; ci < commands.size(); ci++) {
		int i = commands[ci][0];
		int j = commands[ci][1];
		int k = commands[ci][2];
		vector<int>a;
		a.insert(a.end(),array.begin()+i-1,array.begin()+j);// 자르기
		sort(a.begin(), a.end());
		answer.push_back(a[k-1]);


	}
	return answer;
}
int main(void) {
	vector<int> a =
		solution({1,5,2,6,3,7,4},{{2,5,3},{4,4,1},{1,7,3}});
	for (int i = 0; i < a.size(); i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
	return 0;
}

이문제의 취지가 정렬을 만들어 사용해라 인것 일수 있지만 정렬은 구현하는것도 좋지만

stl를 사용하면 더 빠르고 정확합니다. 여기서 포인트는 주어진 자료를 잘 활용해서 원하는 값을 

도출해 낼 수 있는지가 포인트가 되지 않을까 합니다. 어려운 문제는 아니지만 백터의 기능이 저런게 있는지 알아두면

좋지 않을까 합니다.

 문제를 보게되면

vector<int>a;
		a.insert(a.end(),array.begin()+i-1,array.begin()+j);// 자르기
		

이 부분을 보시면, a는 우리가 저장할 백터라 생각하시고

a.insert(A, B, C);

A-C 부부을 보시면 

A는 a라는 백터의 끝인덱스

B는 복사할 백터의 처음 인덱스 값

C는 복사할 백터의 마지막 인덱스 값+1 범위라고 생각하시면되요 

저렇게 봐도 이해가 안된다면 직접 결과값이 어떻게 되는지 확인하시면됩니다. 

 

아니면 

2번 소스

#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
	vector<int> answer;
	vector<int> tempArray;
	for (int  ci= 0; ci < commands.size(); ci++) {
		tempArray = array;
		int i = commands[ci][0];//i 값
		int j = commands[ci][1];//j 값
		int k = commands[ci][2];//k 값
		sort(tempArray.begin() + i - 1, tempArray.begin() + j);
		//원하는 범위만 정렬 
		//원하는 범위에서 k번째는 i+k-2 의 인덱스
		answer.push_back(tempArray[i+k-2]);
		

	}
	return answer;
}
int main(void) {
	vector<int> a =
		solution({1,5,2,6,3,7,4},{{2,5,3},{4,4,1},{1,7,3}});
	for (int i = 0; i < a.size(); i++) {
		printf("%d ", a[i]);
	}
	printf("\n");
	return 0;
}

간단히 구현하고 싶으시면 이런 방식도 있습니다. 원래 푸는 방식은 어려가지 이므로 참고 하세요.

 

1번 실행 결과

2번 실행 결과

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

1181 단어 정렬  (0) 2020.08.24
1076 저항  (0) 2020.08.24
17142 연구소 3  (0) 2020.08.20
프로그래머스 프린터  (0) 2020.08.19
17141 연구소2  (0) 2020.08.19

댓글