새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 10159 저울

by 언호 2022. 6. 9.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

모든 물건들에 대해서 각 물건이 다른 물건들과 무게 비교가 가능한지 탐색하는 문제입니다.

모든 물건들에 대해서 탐색이 필요하므로, 플로이드 워셜을 이용하엿습니다.

 

물건들을 비교하였을 때 순서에 대한 정보는 필요가 없으므로, 해당 물건 보다 크거나 작은지에 대한 정보만 기록하였습니다.

2) 알고리즘

  • 플로이드 워셜

3) 풀이 코드

사용 언어 - Python

import sys
sys.stdin = open('input.txt')

N = int(sys.stdin.readline())               # 물건의 개수
M = int(sys.stdin.readline())               # 물건 비교한 횟수
order = [[0] * N for _ in range(N)]         # 물건들 간 무게 순서 정보

for _ in range(M):
    light, heavy = map(int, sys.stdin.readline().split())   # 가벼운 것, 무거운 것
    order[light-1][heavy-1] = 1                             # 가벼운 물건 뒤에 무거운 물건이 오므로 1 로 지정

for k in range(N):
    for i in range(N):
        for j in range(N):
            if order[i][k] and order[k][j]:     # i 보다 k 가 무겁고, k 보다 j 가 무거운 경우
                order[i][j] = 1                 # i 보다 j 가 무거우므로 1 지정

for i in range(N):                  # 해당 물건 번호의 행과 열에서 1 인 경우
    cnt = sum(order[i])             # 무게 비교가 되는 물건이므로
    for j in range(N):
        cnt += order[j][i]
    print(N-cnt-1)                  # N 개의 물건에서 1의 개수를 뺌 (1을 추가적으로 빼는건 자기 자신도 빼야하므로)

🔗 문제 링크

- https://www.acmicpc.net/problem/10159

 

10159번: 저울

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

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

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

[백준] 1507 궁금한 민호  (0) 2022.06.11
[백준] 1613 역사  (0) 2022.06.10
[백준] 1956 운동  (0) 2022.06.08
[백준] 2458 키 순서  (0) 2022.06.07
[백준] 11404 플로이드  (0) 2022.06.05

댓글