[Python] 백준 알고리즘 온라인 저지 7568번 덩치
https://www.acmicpc.net/problem/7568
이번 문제에서 가장 헷갈렸던 점은 두 개의 수를 어떻게 비교하느냐 하는 점이었다. 문제를 풀어 나갈수록 점점 접근 방식이 다른 분들의 코드와 비슷해져 가는 것 같아 나름 뿌듯함을 느끼고 있습니다.😄
코드
n = int(input())
people = []
for _ in range(n):
people.append(list(map(int, input().split())))
for i in people:
ranking = 1
for j in people:
if i[0] < j[0] and i[1] < j[1]:
ranking += 1
print(ranking, end=" ")
의사코드
1. 인풋값(n)을 받고 빈 배열 만들기(키와 몸무게를 담을 때 리스트를 이용하기로 하였다)
2. for문을 사용하여 n번 반복하여 people이라는 리스트에 키와 몸무게를 하나의 리스트로 추가
3. 다른 for문을 작성 여기서는 people 리스트 안의 키와 몸무게를 뽑아준다.(i)
4. 여기서 순위는 리스트에서 자신보다 큰 요소가 있다면 += 1을 하는 ranking이라는 변수를 선언
5. 또 for문과 if 활용하여 모든 요스들과 자기자신을 비교 그리고 ranking += 1
6. 한줄에 모두 출력해야하므로 end = " " 내장 함수 사용
덩치
이 문제에서는 어떤 식으로 순위를 메기는지에 대해 이해하면 쉽게 풀 수 있는 문제였다고 생각한다.
덩치를 비교할 때에는 몸무게와 키 두 값 모두가 자신보다 커야 ranking이 오르게 코드를 짜야한다. 명확하게 몸무게와 키에 따른 순위를 나누는 기준이 없기 때문에 중복 순위도 많은 것이다.
풀이
다른 분들의 풀이를 보니 튜플 형태로 이번 문제를 푼 분이 있었다 하지만 충분히 배열로 가능할 거라고 생각하여 리스트를 이용하여 문제를 풀이하게 되었다. 이번 문제는 의사 코드를 조금 세세하게 써놓았고 왜 순위를 이런 식으로 계산하여야 하는지도 위에 따로 정리하여 놓았다. 남은 부분은 if문을 어떻게 설정하느냐인데
- if i[0] < j[0] and i[1] < j[1]: # [i[0],i[1]] vs [j[0],j[1]]
위에서 설명해 놓은 것과 같이 and를 이용하여 몸무게와 키가 모두 자신보다 클 때 ranking에 +1을 하여 출력하는 것이다
[i[0],i[1]] vs [j[0],j[1]] 이와 같이 반복문을 통해 people을 자기 자신을 포함한 요소들을 모두 돌며 비교하게 된다.
가장 작은 (46, 155)와 같이 리스트의 모든 요소가 자신보다 커서 + 4 즉 순위는 5등이 된다.
마지막으로 내장 함수 end를 이용하여 다른 줄로 출력되는 ranking을 한 줄로 띄어서 출력하면 답이 출력됩니다.
풀이 결과
'알고리즘' 카테고리의 다른 글
백준 1436번 영화감독 숌 파이썬 풀이 (0) | 2022.01.14 |
---|---|
백준 1018번 체스판 다시 칠하기 파이썬 풀이 (0) | 2022.01.13 |
백준 2231번 분해합 파이썬 풀이 (0) | 2022.01.09 |
백준 2798번 블랙잭 파이썬 풀이 (0) | 2022.01.07 |
백준 11729 하노이 탑 이동 순서 파이썬 풀이 (0) | 2022.01.04 |