본문 바로가기

알고리즘/소프티어

[파이썬] Softeer 연습문제 #6. 우물 안 개구리 완벽해설

문제

 

https://softeer.ai/practice/6289

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

헬스장에서 N명의 회원이 운동을 하고 있다. 각 회원은 1에서 N사이의 번호가 부여되어 있고, i번 회원이 들 수 있는 역기의 무게는 Wi이다. 회원들 사이에는 M개의 친분관계 (Aj, Bj)가 있다. (Aj, Bj)

softeer.ai

 

 

해설

 

이 문제를 풀기 위해선 자신이 최고라고 생각하지 않게 되는 순간이 딱 한번이라도 있다면 그 사람을 최고가 아니라고 생각하도록 코드로 유도하면 된다.

 

즉 모두 자신이 최고라고 bool 형식을 통해 "True"로 초기화를 한 후, 비교를 하고, 만약 최고가 아니라고 생각하는 순간에 도달했을 때 그 사람을 "False"로 설정을 해주면 된다.

 

 

코드
import sys

# 회원수 N과 관계수 M을 받아들이기.
N,M = map(int, sys.stdin.readline().split())
# 각 회원마다 들 수 있는 중량 받아들이기.
weights = list(map(int, sys.stdin.readline().split()))
# 자신이 최고라고 생각하는 마음가짐 리스트 초기화.
b_best = [True]*N # 다들 최고라 생각하기에 모두 True로 설정.
# 마지막에 최고라고 생각하는 사람 수를 카운트 할 변수 생성
count = 0

# M개의 관계를 모두 확인한다.
for i in range(M):
  # 관계 수 저장하고,
  A, B = (map(int, sys.stdin.readline().split()))
  # 만약 A가 B보다 더 많이 들 수 있다면
  if weights[A-1] > weights[B-1]:
    # B는 자신감 실취, 최고라고 생각 안하게 된다.
    b_best[B-1] = False
  # 만약 B가 A보다 더 많이 들 수 있다면
  elif weights[B-1] > weights[A-1]:
    # A는 자신감 실취, 최고라고 생각 안하게 된다.
    b_best[A-1] = False
  # A랑 B랑 드는 무게가 동일하다면
  elif weights[A-1] == weights[B-1]:
    # A와 B 모두 자신감 실취, 최고라고 생각 안하게 된다.
    b_best[A-1] = False
    b_best[B-1] = False
    
# 자신이 최고라고 생각하는 사람 수를 카운트한다.
for b in b_best:
  if b == True:
    count += 1

print(count)

 

 

결과