dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • HackerRank mysql
  • 기록
  • BFS
  • 프로그래머스
  • 프로그래머스 SQL
  • c++
  • dp
  • 네이버 부스트캠프
  • 서블릿
  • Baekjoon
  • Hackerrank
  • 백준 DP
  • 부스트캠프
  • 스프링
  • AI Tech
  • 일기
  • 회고
  • 그래프탐색
  • 백준
  • 반성

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

[프로그래머스 LV3] 가장 먼 노드 (BFS) [C++]
문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 LV3] 가장 먼 노드 (BFS) [C++]

2021. 4. 10. 17:15
728x90

programmers.co.kr/learn/courses/30/lessons/49189

 

코딩테스트 연습 - 가장 먼 노드

6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

programmers.co.kr

1번 노드로부터 최단 거리 중 가장 먼 노드들의 개수를 찾는 것이다.

 

즉, 1번으로부터 4번 5번 6번 노드의 최단 거리가 3이고 그 거리가 그래프에서 1번과 가장 먼 거리면 정답은 3이다.

 

따라서 나는 input을 인접 리스트에 저장하고, BFS를 수행해서 최단거리를 찾으면 되겠다고 생각했다.

 

#include <string>
#include <vector>
#include <queue>

using namespace std;

vector<int> v[20001];
int check[20001], record[20001], mn;

void BFS(int startx){
    queue<int> q;
    check[startx] = true;
    q.push(startx);
    
    while(!q.empty()){
        int x = q.front();
        q.pop();
        
        for(int i = 0;  i < v[x].size() ; i++){
            int next = v[x][i];
            if(!check[next]){
                q.push(next);
                check[next] = true;
                record[next] = record[x] + 1;
                mn = max(mn, record[next]);
            }
        }
    }
    
    
}


int solution(int n, vector<vector<int>> edge) {
    int answer = 0;
    for(int i = 0 ; i < edge.size() ; i++){
        int from = edge[i][0];
        int to = edge[i][1];
        v[from].push_back(to);
        v[to].push_back(from);
    }
    
    BFS(1);
    
    for(int i = 1 ; i <= n ; i++){
        if(record[i] == mn)
            answer++;
    }
    
    
    return answer;
}

BFS를 진행하면서 모든 경로에 1번과의 거리를 저장해준다.

 

이후 계산해두었던 최장거리를 노드들의 거리와 비교하면서 그 거리에 해당하는 노드면 개수를 세줬다.

 

인접 리스트 구현으로 BFS의 시간 복잡도는 O(V+E)로 충분했다.

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글

[프로그래머스 LV2] 괄호 변환 (문자열, 2020 카카오 블라인드 문제) [C++]  (0) 2021.05.03
[프로그래머스 LV3] 섬 연결하기 (그리디, 유니온파인드) [C++]  (0) 2021.04.23
[프로그래머스 LV4] 3 x n 타일링 (DP) [C++]  (0) 2021.03.16
[프로그래머스] 여행경로 (문자열, BFS) [C++]  (0) 2021.03.12
[프로그래머스] 등굣길 (DP, DFS) [C++]  (0) 2021.03.12
    '문제 풀이/프로그래머스 알고리즘, SQL' 카테고리의 다른 글
    • [프로그래머스 LV2] 괄호 변환 (문자열, 2020 카카오 블라인드 문제) [C++]
    • [프로그래머스 LV3] 섬 연결하기 (그리디, 유니온파인드) [C++]
    • [프로그래머스 LV4] 3 x n 타일링 (DP) [C++]
    • [프로그래머스] 여행경로 (문자열, BFS) [C++]
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바