For Programmer

백준 7568번 파이썬 문제풀이(브루트 포스- 덩치) 본문

코팅테스트/백준 문제 모음

백준 7568번 파이썬 문제풀이(브루트 포스- 덩치)

유지광이 2021. 10. 6. 16:24
728x90

 

코드

n = int(input())
weightArray = []

for i in range(n):
    x, y = map(int, input().split())
    weightArray.append([x, y]) #이중리스트 형태로 저장

for i in weightArray: #이중리스트의 각 리스트에 접근
    rank = 1 #순위 변수 1로 초기화
    for j in weightArray: #이중리스트의 각 리스트에 접근(비교대상)
        if i[0] < j[0] and i[1] < j[1]: #만약 첫번째 사람의 체중과 키가 다른사람의 체중과 키보다 작다면
            rank += 1 #랭크를 +1 해준다.
    print(rank, end=" ")

-> 이문제는 그냥 간단히 나보다 키와 몸무게가 큰 사람이 있으면 나의 순위에다가 +1만 해주면 되는 간단한 문제이다. 그 식이 

 if i[0] < j[0] and i[1] < j[1]:  여기 if문 한줄로 표현이 된다.
          

 

사실 이문제 정답보고 풀었다... 문제를 너무 어렵게 생각해서 각각의 체중과 키를 리스트에 저장해놓고 체중대로 , 키대로 정렬까지 해가면서 풀려고 하니 문제가 풀리지 않았다. 사실 if문 한줄이면 문제가 풀리는 건데... 

 

만약 이문제를 랭크 순위대로 몸무게를 출력하라고 하면 어떻게 하면 될까?

이중리스트에 저장할 때 몸무게,키,순위값을 같이 저장해주면 된다. 그리고 나서 리스트를 랭크순위대로 정렬만 해주면 된다.(lamda이용)

 

n = int(input())
weightArray = []

for i in range(n):
    x, y = map(int, input().split())
    weightArray.append([x, y, i])  # 이중리스트 형태로 저장

for i in range(len(weightArray)):  # 이중리스트의 각 리스트에 접근
    rank = 1  # 순위 변수 1로 초기화
    for j in range(len(weightArray)):  # 이중리스트의 각 리스트에 접근(비교대상)
        if weightArray[i][0] < weightArray[j][0] and weightArray[i][1] < weightArray[j][1]:  # 만약 첫번째 사람의 체중과 키가 다른사람의 체중과 키보다 작다면
            rank += 1  # 랭크를 +1 해준다.
    weightArray[i][2] = rank #해당 랭크 값을 리스트에 같이 저장

#랭크 순위대로 정렬
weightArray.sort(key= lambda weightArray:weightArray[2])

#랭크 순위대로 출력(몸무게 출력)
for i in weightArray:
    print(i[0],end=" ")

 

 

 

 

728x90
Comments