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

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 10159(저울) - Python(파이썬),Java(자바) - 플로이드 워셜

  • 2022.06.26 19:39
  • [백준] Python,Java로 풀기📖/최단거리
    반응형
     

    10159번: 저울

    첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩

    www.acmicpc.net

    예제 풀이

    그림으로 표현하면 이런식으로 표현 된다.

    그럼 연결된 노드들을 표로 표현하면 이렇게 된다

    이제 차례대로 1번노드부터 6번노드까지 경로노드로 거쳐서 간다고 할 때 표를 작성하면

    1️⃣ 1번 노드가 경로노드인 경우 -> 없음

    2️⃣ 2번 노드가 경로노드인 경우 -> 1번 노드에서 3번 노드로 가는 경우 D13 = (D12 + D23) =2로 변경

     

    3️⃣ 3번 노드가 경로노드인 경우

    -> 1번 노드에서 4번 노드로 가는 경우 D14 = (D13 + D34) =3로 변경

    -> 2번 노드에서 4번 노드로 가는 경우 D24 = (D23 + D34) = 2로 변경

     

    4️⃣ 4번 노드가 경로노드인 경우 -> 없음

    5️⃣ 5번 노드가 경로 노드인 경우 -> 6번 노드에서 4번 노드로 가는 경우 D64 = (D65+D54) = 2로 변경

    6️⃣ 6번 노드가 경로 노드인 경우 -> 없음

     

    결론 : graph[i][j] 와 graph[j][i]의 값이 모두 빈칸인 경우 세기

     

     

    문제 풀이

    ① (n+1) * (n+1) 테이블에 값이 INF인 graph 선언
    ② graph [i][i]인 값을 모두 0으로 만들기
    ③ m개의 a>b인 값을 graph[a][b]에 1로 넣기
    ④ for루프로 경로노드가 1부터 n까지인 경우 -> (시작노드->경로노드->도착노드의 값)과 (시작노드-> 도착노드의 값)을 비교하여 작은 값을 테이블에 대입
    ⑤ graph[i][j], graph[j][i]의 값이 모두 INF인 경우 값을 비교할 수 없다고 판단하여 출력하기

    💻Python(파이썬)

    import sys
    n = int(sys.stdin.readline())
    m = int(sys.stdin.readline())
    INF = int(1e9)
    graph = [[INF]*(n+1) for _ in range(n+1)]
    
    #graph[i][i]인 경우 =0으로 넣기
    for i in range(n+1):
        graph[i][i]=0
    #m개의 a>b인 값을 받아 graph[a][b]=1로 넣기
    for i in range(m):
        a,b = map(int,sys.stdin.readline().split())
        graph[a][b]=1
    
    #경로노드
    for i in range(1,n+1):
        #시작 노드
        for a in range(1,n+1):
            #도착노드
            for b in range(1,n+1):
                graph[a][b]=min(graph[a][b],graph[a][i]+graph[i][b])
    
    
    #둘다 INF가 아닌 경우 찾아 cnt +1하고 출력하기
    for i in range(1,n+1):
        cnt =0
        for j in range(1,n+1):
            if graph[i][j]==INF and graph[j][i]==INF:
                cnt+=1
        print(cnt)

    💻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));
            int N = Integer.parseInt(br.readLine());
            int M = Integer.parseInt(br.readLine());
            int[][] graph = new int[N+1][N+1];
            int INF = (int)1e9;
            for(int i=0;i<N+1;i++){
                Arrays.fill(graph[i],INF);
            }
            //M개의 a>b인 수를
            for(int i=0;i<M;i++){
                StringTokenizer st = new StringTokenizer(br.readLine());
                graph[Integer.parseInt(st.nextToken())][Integer.parseInt(st.nextToken())]=1;
            }
            for(int i=1;i<N+1;i++){
                for(int a=1;a<N+1;a++){
                    for(int b=1;b<N+1;b++){
                        graph[a][b] = Math.min(graph[a][b],graph[a][i]+graph[i][b]);
                    }
                }
            }
            for(int a=1;a<N+1;a++){
                int cnt=0;
                for(int b=1;b<N+1;b++){
                    if(graph[a][b]==INF && graph[b][a]==INF){
                        cnt+=1;
                    }
                }
                System.out.println(cnt-1);
            }
    
        }
    }
    반응형

    '[백준] Python,Java로 풀기📖 > 최단거리' 카테고리의 다른 글

    백준 4485(녹색 옷 입은 애가 젤다지?) - 다익스트라알고리즘, 힙구조, 최단거리- python  (0) 2024.11.04
    백준 1140(플로이드) -Python(파이썬) - 플로이드워셜 알고리즘  (0) 2022.06.20
    백준 2110(공유기 설치) - Python(파이썬) - 이분탐색  (0) 2022.06.20
    백준 1504(특정한 최단 경로) - Python(파이썬) - 최단 경로  (0) 2022.06.12

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 4485(녹색 옷 입은 애가 젤다지?) - 다익스트라알고리즘, 힙구조, 최단거리- python

      백준 4485(녹색 옷 입은 애가 젤다지?) - 다익스트라알고리즘, 힙구조, 최단거리- python

      2024.11.04
    • 백준 1140(플로이드) -Python(파이썬) - 플로이드워셜 알고리즘

      백준 1140(플로이드) -Python(파이썬) - 플로이드워셜 알고리즘

      2022.06.20
    • 백준 2110(공유기 설치) - Python(파이썬) - 이분탐색

      백준 2110(공유기 설치) - Python(파이썬) - 이분탐색

      2022.06.20
    • 백준 1504(특정한 최단 경로) - Python(파이썬) - 최단 경로

      백준 1504(특정한 최단 경로) - Python(파이썬) - 최단 경로

      2022.06.12
    다른 글 더 둘러보기

    정보

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

    쿄코코

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

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (168)
      • 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)
      • 까먹을까봐 적는 것들 (4)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

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

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

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

    티스토리

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

    티스토리툴바