본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 7568번 덩치, 파이썬 설명

by Godgil 2020. 9. 13.

백준 알고리즘 브루트 포스 단계의 7568번 '덩치' 문제를 파이썬으로 풀어보았다.

풀면서, 내가 한 생각을 토대로 설명을 포스팅 해 보려 한다.

 

문제 출처 

https://www.acmicpc.net/problem/7568

 

7568번: 덩치

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

www.acmicpc.net

 

문제는 위의 링크에서 볼 수 있다.

 

먼저 문제 해석을 해 보면

 

#1. 첫 줄에는 사람의 수가 주어진다.

#2. 둘째 줄에는, 사람의 덩치가 (몸무게, 키)의 형태로 한 줄에 한명의 정보가 주어진다.

#3. 이를 바탕으로, 덩치의 순위를 메기는 것인데, 키와 덩치가 둘 다 커야 다른 사람보다 덩치가 큰 것으로 판단한다.

#4. 키만 크고 덩치는 작은 경우, 같은 순위로 판단한다.

#5. 입력받은 순서대로, 덩치의 순위를 출력하라.

 

이렇게 나눌 수 있다.

먼저 잘 생각 해 보자.

 

브루트 포스는 전체 경우의 수를 다 돌리면서, 찾는 방식이다.

그렇다면

 

#1. 입력 받은 덩치의 정보를 리스트로 저장

#2. 고정된 하나의 인덱스를 둔 뒤.

#3. 다른 인덱스를 리스트 전체로 돌리면서, 조건문을 통해, 키와 덩치가 모두 큰 경우에만 덩치값을 +1 해 준다.

#4. 고정된 인덱스 값을 올린다. 이후 출력한다.

 

이렇게 머리 속으로 순서도를 상상해 보았다.

이 것을 토대로, 코드를 써 내려갔다.

 

N = int(input())
lst = list()
for i in range(N):
    lst.append(input().split())

 첫 코드는 보는바와 같이, 리스트를 생성해서, 입력된 값들을 저장하는 형태이다.

 

이후

for i in range(N):
    grade = 1
    for j in range(N):
        if lst[i][0] < lst[j][0] and lst[i][1] < lst[j][1]:
            grade = grade + 1
    print(grade,end=" ")

반복문을 통해, 전체 경우의 수를 다 돌리면서, 덩치 값을 판단해 준다.

키와 몸무게 두 값이 전부 큰 경우에만 큰 덩치로 판단하기 때문에, 두 값 다 큰 경우에만 grade 값에 1을 더해주었고, 바로 grade를 출력 해 주는 형태로 코드를 썼다.

 

막 복잡한 형태의 문제는 아니다.

조건만 잘 생각 해 주도록 하자.

 

전체 코드 in 깃허브

 

Younggil-kim/BaekJoon_Study

Contribute to Younggil-kim/BaekJoon_Study development by creating an account on GitHub.

github.com

 

댓글