반응형
https://programmers.co.kr/learn/courses/30/lessons/42628
/* 문제의 해설에 앞서 내가 프로그래머스 문제를 푸는 나만의 기준에 대해 알리고자 한다. 백준은 온라인 강의 중급 2/3까지, 프로그래머스는 level 3까지의 문제를 해결하려고 노력하고 있다. 개인적인 생각으로는 프로그래머스 level 2까지는 백준 온라인 강의 초급보다 쉬운 거 같다. 그렇기 때문에 다음과 같은 순서로 코딩 문제를 풀고 있다.
- 프로그래머스 level 1, 2 문제 다 풀기기
- 백준 초급문제 풀기
- 백준 중급문제 풀기 풀다가 막히면
- 프로그래머스 level 3 문제 풀기
- 다시 백준 중급문제 풀기 (brute force, BFS, DFS, DP 위주로 풀기)
- 반복...
지금 3번의 상태에 있다.. 분할 정복 코딩이 날 힘들게 한다.. 그래서 프로그래머스 level 3 문제를 풀 예정이다. (참고로 level 3 스킬 체크를 했는데 80점 탈락을 했다ㅠㅠ) */
본 문제는 프로그래머스의 이중우선순위 큐 문제다. 문제에 제시된 조건으로
- 1. I (숫자) : 큐에 주어진 숫자를 삽입
- 2. D 1 ; 큐에서 최댓값을 삭제
- 3. D -1 : 큐에서 최솟값을 삭제
가 있다. 일단 정렬이 되어야하고, 최댓값, 최솟값을 삭제할 수 있어야 한다. 그렇기 때문에 문제에서는 vector를 이용하여 문제를 해결할 수 있다.
- (조건 1) 일경우 vector에 저장
- (조건 2, 3) 일 경우 vector가 공백인지 확인 후 처리
문제에 입력은 string으로 들어오기 때문에 문자열을 잘해야 한다.
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
36
37
38
39
40
41
42
43
44
45
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> oper) {
vector<int> answer;
for (int i = 0; i < oper.size(); i++) {
if (oper[i][0] == 'I') {
string s = "";
for (int j = 2; j < oper[i].size(); j++) {
s += oper[i][j];
}
answer.push_back(stoi(s));
}
else {
if (answer.size() == 0) continue;
if (oper[i][2] == '-') {
sort(answer.rbegin(), answer.rend());
answer.pop_back();
}
else {
sort(answer.begin(), answer.end());
answer.pop_back();
}
}
}
sort(answer.begin(), answer.end());
vector<int> ans;
int sizes = answer.size();
if (sizes == 0) {
ans.push_back(0);
ans.push_back(0);
}
else if (sizes == 1) {
ans.push_back(answer[0]);
ans.push_back(answer[0]);
}
else {
ans.push_back(answer[answer.size()-1]);
ans.push_back(answer[0]);
}
return ans;
}
|
cs |
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] level 3 - 예산 (0) | 2020.02.09 |
---|---|
[프로그래머스] level 3 - 타일 장식물 (0) | 2020.02.09 |
[프로그래머스] 힙(Heap) - 더 맵게, C++ (0) | 2020.01.06 |
[프로그래머스] 연습문제 - 문자열 내 마음대로 정렬하기, C++ (0) | 2020.01.06 |
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 오픈 채팅방, C++ (0) | 2020.01.06 |
댓글