머리말
문제 링크
이 문제를 선택한 이유
- 구현 문제 연습
- 반복문과 조건문을 적재적소에 활용하기 위함
풀이
- 몸무게와 키에 대한 표를 리스트의 요소로서 할당해야 한다.
- 여기서 몸무게와 키는 튜플로 묶어서 할당했다.
- 리스트의 요소를 반복하면서 현재의 요소를 1등으로 초기화한다.
- 자신을 포함한 다른 모든 요소를 비교하면서 자신보다 몸무게도 많이 나가고 키도 큰 사람이 있다면 나의 등수의 숫자의 크기를 늘린다.
- 여기서 자기 자신을 포함해도 4번의 조건에 해당하지 않기에 괜찮다.
- 4번에서 나온 등수를 공백 단위로 하나하나 출력한다.
# 7568번: 덩치
# 실버 5
# <https://www.acmicpc.net/problem/7568>
# import sys
# sys.stdin = open("input.txt", "r")
# input = sys.stdin.readline
n = int(input())
table = [] # <몸무게,키>에 대한 표 초기화
# 반복문을 돌면서 표를 새로 할당
for _ in range(n):
x, y = list(map(int, input().split()))
table.append((x, y))
# print(table) # [(55, 185), (58, 183), (88, 186), (60, 175), (46, 155)]
# 현재 인덱스에 있는 사람의 등수를 1등으로 초기화
# 모든 사람과 비교하면서, 나보다 몸무게도 크고 키도 큰 사람이 있으면 등수 증가
for i in table:
rank = 1
for j in table:
if i[0] < j[0] and i[1] < j[1]:
rank += 1
print(rank, end=" ")
꼬리말
처음에 무리하게 접근한 풀이
- 표에서 순위에 맞게 표를 정렬하여 정렬된 표를 만들려고 했다.
- 이러면 정렬된 표에 여러 변수를 접근하여 등수를 매긴다.
- 여기까지는 좋았지만, 이것은 정렬된 표에 대한 등수이기에 또다시 원본 표에서 접근해야 하기에 너무 복잡했다.
- 여러 변수와 반복문을 계속 접근하다 보니 멘붕이 왔다…
n = int(input())
table = [] # <몸무게,키>에 대한 표 초기화
# 반복문을 돌면서 표를 새로 할당
for _ in range(n):
x, y = list(map(int, input().split()))
table.append((x, y))
# print(table) # [(55, 185), (58, 183), (88, 186), (60, 175), (46, 155)]
ranked_table = table
for _ in range(n):
for i in range(n-1):
if table[i][0] < table[i+1][0] and table[i][1] < table[i+1][1]:
ranked_table[i], ranked_table[i+1] = ranked_table[i+1], ranked_table[i]
print(ranked_table) # [(88, 186), (55, 185), (58, 183), (60, 175), (46, 155)]
ranks = []
rank = 1
flag = 0
for i in range(n-1):
if ranked_table[i][0] > ranked_table[i+1][0] and ranked_table[i][1] > ranked_table[i+1][1]:
ranks.append(rank + flag)
rank += 1
flag = 0
else:
ranks.append(rank)
flag += 1
print(ranks)
회고
- 다음에 만약 이번처럼 생각보다 너무 복잡해진다면, 과감히 다른 방식에 대한 접근을 고민해 보자.
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Swift) 11866번: 요세푸스 문제 0 (0) | 2023.05.26 |
---|---|
[백준] (Python) A와 B (0) | 2023.05.26 |
[백준] (Python) 1193번: 분수찾기 (0) | 2023.05.22 |
[백준] (Swift) 20546번 기적의 매매법 (0) | 2023.05.19 |
[백준] (Swift/Python) 1213번: 펠린드롬 만들기 (0) | 2023.05.16 |
댓글