[알고리즘]씨름선수

김도연·2024년 1월 12일

알고리즘

목록 보기
24/56

문제

현수는 씨름 감독입니다. 현수는 씨름 선수를 선발공고를 냈고, N명의 지원자가 지원을 했습 니다. 현수는 각 지원자의 키와 몸무게 정보를 알고 있습니다.
현수는 씨름 선수 선발 원칙을 다음과 같이 정했습니다.
“다른 모든 지원자와 일대일 비교하여 키와 몸무게 중 적어도 하나는 크거나, 무거운 지원자 만 뽑기로 했습니다.”
만약 A라는 지원자보다 키도 크고 몸무게도 무거운 지원자가 존재한다면 A지원자는 탈락입니다.

▣ 입력설명
첫째 줄에 지원자의 수 N(5<=N<=50)이 주어집니다.
두 번째 줄부터 N명의 키와 몸무게 정보가 차례로 주어집니다. 각 선수의 키와 몸무게는 모두 다릅니다

▣ 출력설명
첫째 줄에 씨름 선수로 뽑히는 최대 인원을 출력하세요.

입력예제1

5
172 67
183 65
180 70
170 72
181 60

출력예제1

3

[내 코드]

N=int(input())
k=[list(map(int,input().split())) for _ in range(N)]


cnt=[0]*N
for i in range(N):
    
    for j in range(i+1,N+i):
        j=j%N
        if k[i][0]>k[j][0] or k[i][1]>k[j][1]:
            cnt[i]+=0
        else:
            cnt[i]+=1
            
count=0
for n in cnt:
    if n==0:
        count+=1

print(count)
  1. 입력받은 K배열에 각 선수들의 키와 몸무게를 저장
  2. 이중 for문을 이용해서 k배열에서 자기자신을 제외하여 모든 원소들과 키와 몸무게 비교
    (j=j%N을 이용해 j가 인덱스값을 벗어나면 다시 인덱스 0부터 해서 i-1인덱스까지 비교)
  3. 키,몸무게 중 하나라도 크지않으면 cnt배열에 1씩 추가(몸무게 또는 키가 다른 선수들보다 하나라도 크면되므로)
  4. 이때, cnt배열에서 0값을 가지는 원소의 개수 출력

[해설코드]

n=int(input())
body=[]
for i in range(n):
	a,b=map(int,inpur().split())
    body.append((a,b))
body.sort(reverse=True)
largest=0
cnt=0
for x,y in body:
	if y>largest:
    	largest=y;
        cnt+=1
print(cnt)
  1. 키순으로 우선 정렬
  2. 첫 번째 선수의 몸무게는 max값 and counting, 그 다음 선수의 몸무게와 max값 비교
  3. 즉 max값이 새로 갱신이 될 때 counting.

0개의 댓글