본문 바로가기

C++/프로그래머스

(18)
[프로그래머스] [C++] 디스크 컨트롤러 문제 풀이 #include #include #include using namespace std; // 두 번째 원소로 정렬하기 위함. // a b는 내림차순이다. bool cmp(vector a, vector b){ return a.back() < b.back(); } int solution(vector jobs) { // 작업의 시작 시간 int start = 0; // 작업의 개수 int jobs_cnt = jobs.size(); //소요시간이 낮은 순으로 정렬 sort(jobs.begin(), jobs.end(), cmp); // 배열이 빌 때까지 while (!jobs.empty()) { // 현재 jobs는 소요시간을 기준으로 정렬된 상태. 이제 여기에서 시작시간이 ..
[프로그래머스] [C++] 더 맵게 문제 풀이 #include #include #include using namespace std; int solution(vector scoville, int K) { int answer = 0; // 우선순위 큐를 사용. 오름차순으로 사용하기 위해 greater 추가 priority_queue pq; // 우선순위 큐에 scovile 값을 넣는다. auto는 파이썬의 for i in array와 같은 표현이라고 생각하면 된다. for (auto it : scoville) pq.push(it); while (1) { // 첫 번째 원소를 가져온 후 pop한다. int first = pq.top(); pq.pop(); // pq를 다 돌았음에도 스코빌 지수가 충족되지 않는다면 -1을 리턴한다. if (pq...
[프로그래머스] [C++] 프린터 문제 풀이 #include #include #include using namespace std; int solution(vector priorities, int location) { int answer = 0; // 고유번호와 우선순위 값을 받기 위해 pair로 설정 queue q; // 우선순위 큐. 내림차순으로 자동 정렬된다. priority_queue pq; // q를 만들어 고유번호와 우선순위 값을 넣고 우선순위 큐인 pq에 넣는다. for (int i = 0; i < priorities.size(); i++) { q.push(make_pair(i, priorities[i])); pq.push(priorities[i]); } // q가 빌 때까지 while (!q.empty()) { // q의 맨..
[프로그래머스] [C++] 다리를 지나는 트럭 문제 풀이 #include #include #include using namespace std; int solution(int bridge_length, int weight, vector truck_weights) { int answer = 0; // 다리를 지나고 있는 트럭의 배열 queue across_truck; // 다리 위에 있는 트럭의 무게 int max_size = 0; // 트럭의 무게 int size = 0; // 각 트럭을 반복문으로 돌면서 for(int i = 0; i < truck_weights.size(); i++){ size = truck_weights[i]; while(1){ // 다리에 트럭이 한 대도 없으면 if(across_truck.empty()){ // 트럭이 다리 위..
[프로그래머스] [C++] 기능개발 문제 풀이 #include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer; queue pr, sp; // queue를 만들어 값을 넣는다. for (int i = 0; i < progresses.size(); i++) { pr.push(progresses[i]); sp.push(speeds[i]); } // 진도의 증가를 day로 표현한다. 곱셈을 사용하기 때문에 초기값은 1. int day = 1; // 큐가 빌 때까지 while (!pr.empty()) { //완료된 작업의 개수 int finished = 0; for (int j = 0; j < pr.size(..
[프로그래머스] [C++] 주식가격 문제 풀이 #include #include using namespace std; vector solution(vector prices) { vector answer; for (int i = 0; i < prices.size(); i++) { // 몇 초 동안 떨어지지 않았는지 체크할 변수 int cnt = 0; // i 다음부터 검사하면 되기 때문에 i + 1부터 시작한다. for (int j = i + 1; j < prices.size(); j++) { // i보다 크거나 같으면 계속 더해주고 if (prices[i]
[프로그래머스] [C++] 베스트앨범 문제 풀이 #include #include #include #include using namespace std; // make_pair를 사용했기 때문에 인자도 pair로 받는다. bool pg_cmp(pair a, pair b) { // int 부분을 비교. 여기서는 재생 횟수를 내림차순으로 비교하는 것이다. 큰것부터 가져오기 떄문. return a.second > b.second; } vector solution(vector genres, vector plays) { vector answer; // 각 장르의 총 재생횟수를 카운트 map genre_cnt; for (unsigned int i = 0; i < genres.size(); i++) genre_cnt[genres[i]] += plays[i]..
[프로그래머스] [C++] 위장 문제 풀이 #include #include #include using namespace std; int solution(vector clothes) { // map map m; // 이후 곱셈을 사용하기 위해 answer를 1로 초기화 int answer = 1; // 의상의 종류만 확인하면 되기 때문에 clothes 배열에서 의상 종류만 가져온 후 // 각 의상의 개수를 더한다. for(vector i : clothes) m[i[1]]++; // 하단 설명 참조 for(auto it : m) answer *= (it.second + 1); return answer - 1; } 여기에서는 (a+1)(b+1)(c+1)...-1라는 공식을 사용하였습니다. 예를 들어 headgear가 5개, eyewear가 ..