큰 수 만들기 / Greedy
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/42883#qna number의 길이가 아주 큰 값이기 때문에, Greedy로 다음 수가 더 크다면 현재의 수를 지워나가는 방식으로 문제를 해결해야 했다.✅ Greedy 풀이#include #include using namespace std;string solution(string number, int k) { string answer = number; auto it = answer.begin(); while (k > 0) { if (it + 1 == answer.end() || *it while문의 if 조건문을 살펴보면, 우선 현재의 it이 가리키는 수보다 다음 인..
택배 상자 / stack
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/131704문제를 요약하자면, 1~n까지 순서대로 메인 컨테이너 벨트에서 상자가 나오는데 이것을 order 순서에 맞게 트럭에 실어야한다.보조 컨테이너 벨트가 존재하는데, 메인 컨테이너에서 나오는 상자와 order 순서가 맞지 않을 경우 보조 컨테이너에 순차적으로 넣어 보관이 가능하다. 이 보조 컨테이너는 stack처럼 후입선출 구조이다.메인 컨테이너 벨트와 보조 컨테이너 벨트 모두 사용해서 order 순서에 맞게 몇 개의 상자를 실을 수 있는지 묻는 문제이다. ✅ 보조 컨테이너 stack을 사용한 풀이#include #include #include using namespace std;void chec..
쿼드압축 후 개수 세기 / 재귀
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/689362차원 배열 arr가 주어지고, 이걸 쿼드 트리 방식으로 압축했을 때 최종적으로 남는 0의 개수와 1의 개수를 세는 문제이다.재귀호출을 하며 현재 사각형 배열의 값이 모두 같다면 더 이상 쪼갤 필요 없이 바로 압축이 가능하고, 그렇지 않으면 다시 4등분해서 각각에 대해 다시 압축을 시도해야했고, 이 과정을 재귀호출로 계속 반복했다. ✅ 재귀호출로 문제 해결 코드#include #include using namespace std;pair compress(const vector>& arr, int y, int x, int size){ int base = arr[y][x]; bool al..
소수 찾기 / 순열, DFS
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/42839numbers 문자열의 크기가 7 이하이므로 브루트포스로 문제를 해결하려고 했고, 연습삼아 next_permutation을 사용해 순열, 그리고 DFS로 두 번 풀이해보았다.두 방법 모두, 모든 수의 조합을 시도하며 각 수가 소수인지 판단하여 unordered_set에 넣어 중복된 숫자를 제거하였다. ✅ 순열을 이용한 풀이#include #include #include #include #include using namespace std;bool isprimenum(const string& str){ int num = stoi(str); for (int i = 2; i prime_n..
가장 큰 수 / 정렬
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/42746처음에 이 문제를 보고, 모든 경우의 수를 조합해야된다는 생각에 바로 브루트 포스로 문제를 해결하였다.코드 작성을 끝마치고 나서야 제한 사항이 눈에 들어왔고 10만이라는 숫자를 뒤늦게 확인하였다..당연히 시간 초과가 날 것이라고 판단하고 다시 문제를 어떻게 해결해야될지 고민이 되었다.입출력의 예를 살펴보니 앞자리의 숫자가 큰 숫자가 우선 순위가 높다는 것을 알게 되고, 각 숫자의 첫번째 자리 숫자를 비교해야되나 하는 생각이 들던 찰나에 3, 30, 34 와 같이 앞자리의 숫자가 같을 경우엔 비교를 할 수 없음을 깨달았다.아에 priority queue에서 비교 함수를 작성해 a + b 조합과 ..
다리를 지나는 트럭 / 큐
·
공부/Code Cata
https://school.programmers.co.kr/learn/courses/30/lessons/42583#qna#include #include using namespace std;int solution(int bridge_length, int weight, vector truck_weights) { queue bridge; int cur_weight = 0; int idx = 0; int time = 0; // bridge_length(다리에 최대 올라갈 수 있는 트럭 총량)만큼 무게가 0인 트럭 채우기 for (int i = 0; i bridge_length만큼 다리에 올라갈 수 있는 트럭의 총 개수가 제한되어있어 queue에 미리 무게가 0인 트럭을 채워 넣..