https://school.programmers.co.kr/learn/courses/30/lessons/118668
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
과정
- 만족해야 하는 최대 알고력과 코딩력을 구한다.
- 알고력 1, 코딩력 1 증가 문제를 추가한다.
- 알고력과 코딩력을 x,y로 생각하고 방문 배열을 87'654'321로 초기화 해준다.
- 다익스트라를 실행하되 최대 알고력과 코딩력을 넘어가지 않도록 해주고(방문 배열을 위해) 시간을 기준으로 우선순위 큐를 정렬한다.
- 우선순위 큐를 사용하므로 항상 time값은 해당 알고력과 코딩값에 대한 최소 time이 된다. 만약 최대 알고력과 최대 코딩력을 큐에서 꺼낸 순간 만족한다면 무조건 최소값이 되므로 return time을 해준다.
코드
더보기
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
struct dat{
int time,alp,cop;
bool operator<(const struct dat& d) const{
return time > d.time;
}
};
int mcost[151][151];
int maxalp = 0, maxcop = 0;
int dijkstra(int alp, int cop, vector<vector<int>> problems){
priority_queue<dat> pq;
fill(&mcost[0][0],&mcost[150][151],87654321);
pq.push({0,alp,cop});
mcost[alp][cop]=0;
while(!pq.empty()){
dat d=pq.top();
pq.pop();
if(d.time > mcost[d.alp][d.cop])
continue;
if(d.alp >= maxalp && d.cop >= maxcop)
return d.time;
for(int i=0,sz=problems.size();i<sz;++i){
if(d.alp<problems[i][0]||d.cop<problems[i][1])
continue;
dat nd = {
d.time+problems[i][4],
d.alp+problems[i][2]>maxalp?maxalp:d.alp+problems[i][2],
d.cop+problems[i][3]>maxcop?maxcop:d.cop+problems[i][3]
};
if(mcost[nd.alp][nd.cop] <= nd.time)
continue;
mcost[nd.alp][nd.cop]=nd.time;
pq.push(nd);
}
}
return -1;
}
int solution(int alp, int cop, vector<vector<int>> problems) {
int answer = 0;
for(int i=0,sz=problems.size();i<sz;++i){
maxalp=max(maxalp,problems[i][0]);
maxcop=max(maxcop,problems[i][1]);
}
problems.push_back({0,0,1,0,1});
problems.push_back({0,0,0,1,1});
answer=dijkstra(alp,cop,problems);
return answer;
}

728x90
'알고리즘 > 프로그래머스 문제' 카테고리의 다른 글
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 (0) | 2022.12.28 |
|---|---|
| [ALGORITHM] LEVEL3 2022 KAKAO BLIND RECRUITMENT - 사라지는 발판 (0) | 2022.12.23 |
| [ALGORITHM] LEVEL4 2022 KAKAO TECH INTERNSHIP - 행렬과 연산 c++ (0) | 2022.12.16 |
| [ALGORITHM] LEVEL3 2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 (0) | 2022.12.14 |
| [ALGORITHM] LEVEL4 - 쌍둥이 빌딩 숲 (0) | 2022.12.03 |
댓글