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

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 2252(줄 세우기) - Python(파이썬) - 위상정렬

  • 2022.06.08 23:20
  • [백준] Python,Java로 풀기📖/정렬(Sorting)
    반응형
     

    2252번: 줄 세우기

    첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

    www.acmicpc.net

    위상 정렬 설명 

     

    CHAPTER 6 -번외 정렬 - 위상 정렬(Topology Sort) - Python(파이썬)

    참고 자료 : https://m.blog.naver.com/ndb796/221236874984 위상 정렬 : 순서가 정해져 있는 작업을 수행해야 할 때 그 순서를 정해주기 위해서 사용하는 알고리즘 ex ] 0번 -> 1번 ->3번 -> 5번 순으로 이어진..

    coooco.tistory.com

    💻 Python(파이썬)

    import sys
    from collections import deque
    
    #학생 수, 학생 순서
    n,m = map(int, sys.stdin.readline().split())
    #학생 순서 그래프
    graph = [[] for _ in range(n+1)]
    #진입차수표
    table = [0]*(n+1)
    
    #학생 수만큼 입력 받기
    for i in range(m):
        # 학생 순서 입력
        a,b = map(int,sys.stdin.readline().split())
        graph[a].append(b)
        table[b]+=1
    
    #큐 구현
    q = deque()
    for i in range(1,n+1):
        #진입차수표가 0인 경우 큐에 삽입
        if table[i]==0:
            q.append(i)
    
    #큐가 빌때까지 진행
    while q:
        #현재 값 Pop
        now = q.popleft()
        #연결된 노드
        for i in graph[now]:
            table[i]-=1#1씩 제거
            #진입차수가 0인 값은 큐에 다시 삽입
            if table[i]==0:
                q.append(i)
        print(now,end=" ")

    💻Java(자바)

    import java.util.*;
    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            int n = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());
            ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
            int[] table = new int[n+1];
    
            for(int i=0;i<n+1;i++){
                graph.add(new ArrayList<>());
            }
    
            //그래프 입력받기
            for(int i=0;i<k;i++){
                st = new StringTokenizer(br.readLine()," ");
                int a = Integer.parseInt(st.nextToken());
                int b = Integer.parseInt(st.nextToken());
                graph.get(a).add(b);
                table[b]++;
            }
            Queue<Integer> q = new LinkedList<>();
            //큐에 진입차수가 0인 값 입력
            for(int i=1;i<n+1;i++){
                if(table[i]==0){
                    q.offer(i);
                }
            }
            while(!q.isEmpty()){
                int now = q.poll();
                for(int i:graph.get(now)){
                    table[i]-=1;
                    if(table[i]==0){
                        q.offer(i);
                    }
                }
                System.out.print(now+" ");
            }
        }
    }

     

    반응형

    '[백준] Python,Java로 풀기📖 > 정렬(Sorting)' 카테고리의 다른 글

    백준 2752(세수정렬)- Python(파이썬)  (0) 2022.05.17
    백준 1931(회의실 배정) - Python(파이썬)  (0) 2022.05.17
    백준 10989( 수 정렬하기3 ) - 파이썬(Python)  (0) 2022.05.16
    백준 10814(나이순 정렬) - 파이썬(Python), 정렬(계수 정렬)  (0) 2022.05.16
    백준 -2750 (수 정렬하기) - 선택정렬, 삽입정렬, 계수정렬  (0) 2022.04.26

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 2752(세수정렬)- Python(파이썬)

      백준 2752(세수정렬)- Python(파이썬)

      2022.05.17
    • 백준 1931(회의실 배정) - Python(파이썬)

      백준 1931(회의실 배정) - Python(파이썬)

      2022.05.17
    • 백준 10989( 수 정렬하기3 ) - 파이썬(Python)

      백준 10989( 수 정렬하기3 ) - 파이썬(Python)

      2022.05.16
    • 백준 10814(나이순 정렬) - 파이썬(Python), 정렬(계수 정렬)

      백준 10814(나이순 정렬) - 파이썬(Python), 정렬(계수 정렬)

      2022.05.16
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (169)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (5)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 백준
    • 프로그래머스
    • 코딩테스트준비
    • 오블완
    • TiL
    • 티스토리챌린지
    • 99클럽
    • 항해99

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

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

    티스토리

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

    티스토리툴바