이 영역을 누르면 첫 페이지로 이동
hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

페이지 맨 위로 올라가기

hoonDEV

BOJ 11725 - 트리의 부모 찾기 문제풀이

  • 2020.03.27 15:22
  • 알고리즘/문제풀이

문제를 읽고 이해하기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.

 

출력

첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.

 

재정의와 추상화

DFS, BFS 개념을 알고 있는 상태에서 직접 그래프를 그려보면 금방 풀 수 있는 문제이다. 먼저 해당 정점의 부모를 저장하는 int형 mother[100001]이라는 배열을 선언한다. DFS, BFS를 돌면서 현재 노드의 번호를 now라고 하고, now와 연결된 노드의 번호를 next라고 하였을 때, mother[next] = now; 구문을 매 탐색마다 시행하면 된다.

 

코드 작성

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

vector<int> v[100001];
bool check[100001];
int mother[100001];

void dfs(int start) {
    stack<int> s;
    s.push(start);
    check[start] = true;

    while(!s.empty()) {
        auto now = s.top();
        s.pop();

        for (int i = 0; i < v[now].size(); i++) {
            int next = v[now][i];
            if (!check[next]) {
                s.push(now);
                s.push(next);
                check[next] = true;
                mother[next] = now;
                break;
            }
        }
    }
}

int main() {
    cin.sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;

    for (int i = 0; i < n - 1; i++) {
        int a, b;
        cin >> a >> b;
        v[a].push_back(b);
        v[b].push_back(a);
    }

    dfs(1);
    for (int i = 2; i <= n; i++)
        cout << mother[i] << '\n';

    return 0;
}

'알고리즘 > 문제풀이' 카테고리의 다른 글

BOJ 2293 - 동전 1 문제풀이  (0) 2020.03.27
BOJ 2941 - 크로아티아 알파벳 문제풀이  (0) 2020.03.27
BOJ 1890 - 점프 문제풀이  (0) 2020.03.26
BOJ 1655 - 가운데를 말해봐 문제풀이  (0) 2020.03.26
BOJ 11279 - 최대 힙 문제풀이  (2) 2020.03.25

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • BOJ 2293 - 동전 1 문제풀이

    BOJ 2293 - 동전 1 문제풀이

    2020.03.27
  • BOJ 2941 - 크로아티아 알파벳 문제풀이

    BOJ 2941 - 크로아티아 알파벳 문제풀이

    2020.03.27
  • BOJ 1890 - 점프 문제풀이

    BOJ 1890 - 점프 문제풀이

    2020.03.26
  • BOJ 1655 - 가운데를 말해봐 문제풀이

    BOJ 1655 - 가운데를 말해봐 문제풀이

    2020.03.26
다른 글 더 둘러보기

정보

hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

  • hoonDEV의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그

카테고리

  • 분류 전체보기 (91)
    • 일상 (13)
      • 후기 (1)
      • 계획 (11)
    • 공지사항 (1)
    • 알고리즘 (54)
      • 문제풀이 (53)
      • 이론 (1)
    • 공부 (19)
      • React (0)
      • Angular (5)
      • Java (3)
      • C, C++ (3)
      • JavaScript (6)
      • WEB (2)
    • 디자인 (1)
      • UI, UX (1)
    • 개발 (0)
      • boom (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • 이분탐색
  • 백준
  • es6
  • 그리디
  • dp
  • 문제풀이
  • javascript

나의 외부 링크

정보

훈개발자의 hoonDEV

hoonDEV

훈개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 훈개발자. Designed by Fraccino.

티스토리툴바