기록하지 않았다면 잃어버릴 시간들
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
Home
  • 분류 전체보기 (184)
    • Lang (6)
      • c++ (2)
      • Java (2)
      • python (2)
    • 프레임워크 (18)
      • Spring (16)
      • JPA (2)
    • 알고리즘 (141)
      • 이론 (4)
      • 백준 (59)
      • Codility (13)
      • 프로그래머스 (65)
    • CS (4)
      • 운영체제 (0)
      • 자료구조 (0)
      • DB (4)
      • 네트워크 (0)
      • 보안 (0)
    • 기타 (7)
    • 프로젝트 (4)
      • 게시판 만들기로 배우는 Spring Data JP.. (4)
블로그 내 검색

기록하지 않았다면 잃어버릴 시간들

새로운 것을 배우는게 즐거운 개발자입니다.

  • 알고리즘/프로그래머스

    Programers 배달

    2022. 7. 26.

    by. 내이름은 킹햄찌

    https://school.programmers.co.kr/learn/courses/30/lessons/12978

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    프로그래머스 배달 문제입니다.

     

    아이디어

    조건에 맞는 거리 중 배달을 갈 수 있는 마을을 찾는 문제입니다.

    다익스트라 알고리즘으로 현재 위치에서 배달 할 수 있는 마을의 거리를 계산 후 조건에 맞는 마을들을 찾아내면 되는 문제입니다. 문제가 어렵다면 다익스트라 알고리즘에 대해 공부해볼 필요가 있는 문제입니다.

     

     

    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    
    int solution(int N, vector<vector<int> > road, int K) {
    	int answer = 0;
    	vector<vector<pair<int, int>>> adj(N + 1);
    	vector<int> dist(N + 1, 987654321);
    	priority_queue<pair<int, int> > q;
    	for (auto iter : road) {
    		adj[iter[0]].push_back({ iter[1],iter[2] });
    		adj[iter[1]].push_back({ iter[0],iter[2] });
    	}
    	q.push({ 0,1 });
    	dist[1] = 0;
    
    	//우선큐를 이용한 다익스트라로 간선 정리
    	while (!q.empty()) {
    		int current_dist = -q.top().first;
    		int current = q.top().second;
    		q.pop();
    		if (current_dist > dist[current]) continue;
    
    		for (int i = 0; i < adj[current].size(); i++) {
    			int next = adj[current][i].first;
    			int next_dist = adj[current][i].second;
    
    			if (dist[next] > next_dist + current_dist) {
    				dist[next] = next_dist + current_dist;
    				q.push({ -dist[next],next });
    			}
    
    		}
    	}
    
    	for (auto iter : dist)
    		if (iter <= K) answer++;
    
    
    
    	return answer;
    }

    '알고리즘 > 프로그래머스' 카테고리의 다른 글

    Programers 스킬트리  (0) 2022.07.26
    Programers 주식가격  (0) 2022.07.26
    2019 카카오 인턴쉽 코딩테스트 2번 튜플  (0) 2022.06.01
    2020 카카오 인턴쉽 코딩테스트 4번 경주로 건설  (0) 2022.06.01
    2020 카카오 인턴쉽 코딩테스트 3번 보석 쇼핑  (0) 2022.06.01

    댓글

    관련글

    • Programers 스킬트리 2022.07.26
    • Programers 주식가격 2022.07.26
    • 2019 카카오 인턴쉽 코딩테스트 2번 튜플 2022.06.01
    • 2020 카카오 인턴쉽 코딩테스트 4번 경주로 건설 2022.06.01
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
내이름은 킹햄찌

티스토리툴바