알고리즘 공부(C++)

7568 덩치

혀니리리 2022. 8. 8. 22:14
728x90

7568번: 덩치 (acmicpc.net)

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

N = int(input())
list = []
result = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]

for _ in range(N):
    x,y = map(int, input().split())
    list.append([x, y])
for i in range(N):
    for j in range(i + 1,N):
        if list[i][0] > list[j][0] and list[i][1] > list[j][1]:
            result[j] += 1
        if list[i][0] < list[j][0] and list[i][1] < list[j][1]:
            result[i] += 1
for i in range(N):
    print(result[i])

이번 문제는 좀 바보같이 푼 경향이 없지 않다.. 풀게 된 데에는 시간이 얼마 걸리지 않았지만.. 배열을 만들고 채우는 방법이 np.full(50,1)로 해야하는데 import numpy as np가 되지 않기 때문에.. 그냥 썼다.

그리고 각각을 부르트포스 형태로 돌면서 이전 값과 현재 값을 비교하면서 그 자리의 result값을 추가하는 방식으로 구했다..

이를 보완하는 코드는

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

for i in range(n):
    h, w = map(int, input().split())
    temp.append((h, w))

for i in temp:
    result = 1
    for j in temp:
        if i[0] < j[0] and i[1] < j[1]:
            result += 1
    print(result)

이런 방식이 있다.

이 코드에서 주목할 점은 우선 순서대로 배열을 비교할때 처음값부터 쭈우욱 계산하면 처음 값은 바뀌지 않는다는 점을 이용해서 result를 배열로 지정하지 않고 정수로 그때그때 구하고 바로 출력하는 식으로 했다는 것이다.

또한, list[index]대신에 i자체가 이 역할을 대신하고, 그 i에 i[0]식으로 붙이면 temp의 이중배열을 그대로 사용할 수 있다.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

1966 프린터 큐  (0) 2022.08.10
11047 코인  (0) 2022.08.09
10773 제로  (0) 2022.08.09
11399 ATM  (0) 2022.08.06
BOJ 1931 회의실  (0) 2022.08.05