-
백준 7568번 덩치 어떻게 풀었나. 잘못 푼 과정 참고백준 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=" ")
'백준' 카테고리의 다른 글
백준 2606번 바이러스 어떻게 풀었나. (0) 2023.01.21 백준 2447번 별찍기-10 어떻게 풀었나. 재귀함수 사용. 파이썬 (0) 2023.01.15 백준 1193번 어떻게 풀었나 (0) 2023.01.14 백준 2292번 어떻게 풀었나 (0) 2023.01.13 백준 1158번 어떻게 풀었나. (0) 2023.01.12