[C++] 프로그래머스 숫자게임
·
Algorithm/Programmers
#include #include #include using namespace std; int solution(vector A, vector B) { int answer = 0; sort(A.begin(), A.end()); sort(B.begin(), B.end()); int index = 0; for(int i = 0; i < B.size(); i++) { if(A[index] < B[i]) { index++; answer++; } } return answer; } 풀이 1. 낮은 순으로 정렬해준다. 2. A를 B로 하나씩 비교하면서 최대한 작은 수로 이길 수 있게 유도한다. 느낀점 탐욕적 풀이들은 웬만하면 다 쉽게 생각해야 쉽게 풀리는 것같다. 더 쉽게 생각해보자. https://school.prog..
[C++] 프로그래머스 최고의 집합
·
Algorithm/Programmers
#include #include using namespace std; vector solution(int n, int s) { int num = s / n; //나눌 수 없다면 if(num == 0) { return vector(1, -1); } vector answer(n, num); int extraPlus = s % n; //추가분을 더해준다. n=4, s=14일 경우 끝에서 부터 1씩더해주어 3344이다. while(extraPlus > 0) { answer[answer.size() - extraPlus]++; extraPlus--; } return answer; } 풀이 1. 평균 값을 최대한 곱해주는 것이 최고의 곱이 된다. 2. s / n가 자연수의 최소 값이고 나머지가 있다면 1씩 나눠서 ..
[C++] 프로그래머스 야근 지수
·
Algorithm/Programmers
#include #include #include using namespace std; // 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다 // 높은 순으로 정렬해서 평균을 낮춰야한다. long long solution(int n, vector works) { long long answer = 0; priority_queue q; for(int i = 0; i 0) { if(q.empty()) { break; } n--; int currNum = q.top() - 1; q.pop(); if(currNum > 0) { q.push(currNum); } } while(!q.empty..
[C++] 프로그래머스 숫자의 표현
·
Algorithm/Programmers
#include #include using namespace std; int solution(int n) { int answer = 0; for(int i = 1; i
[C++] 프로그래머스 [PCCP 기출문제] 2번 / 석유 시추
·
Algorithm/Programmers
#include #include #include #include using namespace std; bool visited[500][500]; void dfs(int x, int y, int &count, set& targetNum, const vector& land) { if (visited[x][y]) { return; } visited[x][y] = true; count++; targetNum.insert(y); if (x + 1 < land.size()) { if (land[x + 1][y] == 1) { dfs(x + 1, y, count, targetNum, land); } } if (y + 1 < land[x].size()) { if (land[x][y + 1] == 1) { dfs(x, ..
[C++] 프로그래머스 올바른괄호
·
Algorithm/Programmers
#include #include using namespace std; bool solution(string s) { stack left; for(int i = 0; i < s.size(); i++) { if(s[i] == '(') { left.push(s[i]); } else { if(left.empty()) { return false; } else { left.pop(); } } } if(!left.empty()) { return false; } return true; } 풀이 1. ( 가 나오면 스택에 저장해준다. 큐여도 상관은 없을듯하다. 2. ) 가 나오면 스택에서 ( 를 하나 없애준다. 다만 스택이 비었는데 ) 가 나오면 괄호가 올바르지 않으므로 바로 불가능 판정이다. 느낀점 lv2가 맞나 싶다..