현수는 씨름 감독입니다. 현수는 씨름 선수를 선발공고를 냈고, N명의 지원자가 지원을 했습 니다. 현수는 각 지원자의 키와 몸무게 정보를 알고 있습니다.
현수는 씨름 선수 선발 원칙을 다음과 같이 정했습니다.
“다른 모든 지원자와 일대일 비교하여 키와 몸무게 중 적어도 하나는 크거나, 무거운 지원자 만 뽑기로 했습니다.”
만약 A라는 지원자보다 키도 크고 몸무게도 무거운 지원자가 존재한다면 A지원자는 탈락입니다.
▣ 입력설명
첫째 줄에 지원자의 수 N(5<=N<=50)이 주어집니다.
두 번째 줄부터 N명의 키와 몸무게 정보가 차례로 주어집니다. 각 선수의 키와 몸무게는 모두 다릅니다
▣ 출력설명
첫째 줄에 씨름 선수로 뽑히는 최대 인원을 출력하세요.
5
172 67
183 65
180 70
170 72
181 60
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)
- 입력받은 K배열에 각 선수들의 키와 몸무게를 저장
- 이중 for문을 이용해서 k배열에서 자기자신을 제외하여 모든 원소들과 키와 몸무게 비교
(j=j%N을 이용해 j가 인덱스값을 벗어나면 다시 인덱스 0부터 해서 i-1인덱스까지 비교)- 키,몸무게 중 하나라도 크지않으면 cnt배열에 1씩 추가(몸무게 또는 키가 다른 선수들보다 하나라도 크면되므로)
- 이때, 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)
- 키순으로 우선 정렬
- 첫 번째 선수의 몸무게는 max값 and counting, 그 다음 선수의 몸무게와 max값 비교
- 즉 max값이 새로 갱신이 될 때 counting.