반응형

프로그래밍/코딩테스트 6

[프로그래머스] 택배 배달과 수거하기

문제 주소https://school.programmers.co.kr/learn/courses/30/lessons/150369  풀이https://school.programmers.co.kr/questions/43364못 풀어서 위의 게시물을 참고하였다. d와 p가 0이 될 때까지 while문을 반복하는 것이 핵심이다. 일단 d와 p에서 이렇게 뺀다. d -= deliveries[i]; p -= pickups[i]; 물류창고에 들르면 d와 p에 cap 만큼의 여유가 생긴다.그렇기 때문에 d와 p에 cap 만큼 더한 후에 count를 증가시켜 물류창고에 들른 횟수를 기록해준다. while (d  while문을 빠져나오면 answer에 i에서 물류창고 까지의 거리 * co..

[프로그래머스] 도넛과 막대 그래프

문제 주소https://school.programmers.co.kr/learn/courses/30/lessons/258711 풀이새로 추가된 정점이 모든 그래프와 연결된다는 것과 그래프의 특성만 알면 쉽게 풀 수 있는 문제였다.새로 추가된 정점은 들어오는 간선이 없고 나가는 간선이 2개 이상이다. if (in[i].size() == 0 && out[i].size() > 1){ answer[0] = i; start_node = out[i]; } 8자 그래프의 중앙에 위치한 정점은 들어오는 간선이 2개, 나가는 간선이 2개이다. else if (in[i].size() >= 2 && out[i].size() >= 2){ ..

[프로그래머스/그래프] 순위

문제 주소https://school.programmers.co.kr/learn/courses/30/lessons/49191 풀이count를 그래프 입력하면서 갱신하는 것이 아니라 그래프를 다 입력한 후에 갱신하는 것이 핵심이었다.dfs 할 때 (현재 노드의 count += 이전 노드의 count) 이런 식으로 생각했었는데 그냥 count를 +1씩 해주면 되는 거였다. 코드#include #include #include using namespace std;void update_count(int index, vector>& graph, unordered_map& count, vector& visited){ visited[index] = true; for (auto e: graph[index..

[프로그래머스/그래프] 가장 먼 노드

문제 주소https://school.programmers.co.kr/learn/courses/30/lessons/49189 풀이단방향 간선이 아니라 양방향 간선으로 unordered_map에 입력해야 한다!단방향 간선으로 입력해서 다 틀린 거였다....그 다음은 그냥 다익스트라 최단 거리 알고리즘 사용한 후에 가장 먼 노드의 개수 구하면 된다. 코드#include #include #include #include #include using namespace std;#define INF 1e9int solution(int n, vector> edge) { int answer = 0; // 이어진 노드를 기록 unordered_map> m; for (auto e : edge..

[프로그래머스/크루스칼 알고리즘] 섬 연결하기

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42861문제 설명코드 전문#include #include #include using namespace std;int get_parent(int i, vector& parent){ if (parent[i] == i) return i; return parent[i] = get_parent(parent[i], parent);}void union_parent(int a, int b, vector& parent){ int a_parent = get_parent(a, parent); int b_parent = get_parent(b, parent); if (a_pare..

[프로그래머스/탐욕법] 조이스틱

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42860문제 설명코드 전문#include #include #include using namespace std;int solution(string name) { int answer = 0; int length = name.length(); int move = length - 1; for (int i = 0; i 풀이며칠 간 못 풀어서 질문하기에 있는 풀이를 봤다.https://school.programmers.co.kr/questions/76244 move는 오른쪽, 왼쪽 이동 횟수만 저장한다.오른쪽으로만 진행했을 때 이동 횟수는 최대가 된다. 최댓값으로 초기화 해준다.i..

반응형