백준

백준 7568번 덩치 어떻게 풀었나. 잘못 푼 과정 참고

kimbro6 2023. 1. 16. 00:01

잘못 푼 방법

입력을 A리스트에 모두 받는다.

몸무게를 첫번째, 키를 두번째 기준으로 정렬해 새로운 배열 sortA에 저장해 준다.

그후 알맞게 반복문을 돌려 sortA[i]와 sortA[i-1]을 비교하여 순위를 정해 준다.

그리고 중복되는 값이 있다면, 중복되는 값의 순위도 똑같이 복사 해 준다. (마지막 if문)

from sys import stdin
N = int(stdin.readline())
A = [list(map(int, stdin.readline().split())) for _ in range(N)]
ranking = [-1]*N

sortA = sorted(A, key=lambda x : (-x[0], -x[1]))

count = 1
t = 0
for i in range(N):
	if i == 0:
		ranking[A.index(sortA[i])] = "1"
	elif sortA[i][0] < sortA[i-1][0] and sortA[i][1] < sortA[i-1][1]:
		count+=1+t
		ranking[A.index(sortA[i])] = str(count)
		t = 0
	else:
		ranking[A.index(sortA[i])] = str(count)
		t+=1
        
if -1 in ranking:
	ranking[ranking.index(-1)] = ranking[A.index(A[ranking.index(-1)])]

print(" ".join(ranking))

틀린이유

N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1이 된다.

문제에서 등수는 위와같이 정해진다고 했는데 나는 이것을 무시했다.

(문제를 제대로 안읽은 것이다..ㅠㅠㅠㅠㅠㅠ 내 시간 ㅠㅠ)

 

푸는 방법

위의 등수가 정해지는 조건을 다른 거 생각 하지 않고 브루트포스 알고리즘을 통해 풀면 풀리는 간단한 문제였다.


코드 

from sys import stdin
N = int(stdin.readline())
A = [list(map(int, stdin.readline().split())) for _ in range(N)]

for i in A:
	cnt = 1
	for j in A:
		if i[0] < j[0] and i[1] < j[1]:
			cnt += 1
	print(cnt, end=" ")