[Algorithm] BOJ 7568, Python

yennΒ·2021λ…„ 9μ›” 17일
0

Algorithm

λͺ©λ‘ 보기
6/7
post-thumbnail

πŸ“Œ 문제

μš°λ¦¬λŠ” μ‚¬λžŒμ˜ 덩치λ₯Ό 킀와 λͺΈλ¬΄κ²Œ, 이 두 개의 κ°’μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ κ·Έ λ“±μˆ˜λ₯Ό 맀겨보렀고 ν•œλ‹€. μ–΄λ–€ μ‚¬λžŒμ˜ λͺΈλ¬΄κ²Œκ°€ x kg이고 ν‚€κ°€ y cm라면 이 μ‚¬λžŒμ˜ λ©μΉ˜λŠ” (x, y)둜 ν‘œμ‹œλœλ‹€. 두 μ‚¬λžŒ A 와 B의 λ©μΉ˜κ°€ 각각 (x, y), (p, q)라고 ν•  λ•Œ x > p 그리고 y > q 이라면 μš°λ¦¬λŠ” A의 λ©μΉ˜κ°€ B의 λ©μΉ˜λ³΄λ‹€ "더 크닀"κ³  λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ μ–΄λ–€ A, B 두 μ‚¬λžŒμ˜ λ©μΉ˜κ°€ 각각 (56, 177), (45, 165) 라고 ν•œλ‹€λ©΄ A의 λ©μΉ˜κ°€ B보닀 큰 μ…ˆμ΄ λœλ‹€. 그런데 μ„œλ‘œ λ‹€λ₯Έ 덩치끼리 크기λ₯Ό μ •ν•  수 μ—†λŠ” κ²½μš°λ„ μžˆλ‹€. 예λ₯Ό λ“€μ–΄ 두 μ‚¬λžŒ C와 D의 λ©μΉ˜κ°€ 각각 (45, 181), (55, 173)이라면 λͺΈλ¬΄κ²ŒλŠ” Dκ°€ C보닀 더 무겁고, ν‚€λŠ” Cκ°€ 더 ν¬λ―€λ‘œ, "덩치"둜만 λ³Ό λ•Œ C와 DλŠ” λˆ„κ΅¬λ„ μƒλŒ€λ°©λ³΄λ‹€ 더 크닀고 말할 수 μ—†λ‹€.

Nλͺ…μ˜ μ§‘λ‹¨μ—μ„œ 각 μ‚¬λžŒμ˜ 덩치 λ“±μˆ˜λŠ” μžμ‹ λ³΄λ‹€ 더 "큰 덩치"의 μ‚¬λžŒμ˜ 수둜 정해진닀. 만일 μžμ‹ λ³΄λ‹€ 더 큰 덩치의 μ‚¬λžŒμ΄ kλͺ…이라면 κ·Έ μ‚¬λžŒμ˜ 덩치 λ“±μˆ˜λŠ” k+1이 λœλ‹€. μ΄λ ‡κ²Œ λ“±μˆ˜λ₯Ό κ²°μ •ν•˜λ©΄ 같은 덩치 λ“±μˆ˜λ₯Ό 가진 μ‚¬λžŒμ€ μ—¬λŸ¬ λͺ…도 κ°€λŠ₯ν•˜λ‹€. μ•„λž˜λŠ” 5λͺ…μœΌλ‘œ 이루어진 μ§‘λ‹¨μ—μ„œ 각 μ‚¬λžŒμ˜ λ©μΉ˜μ™€ κ·Έ λ“±μˆ˜κ°€ ν‘œμ‹œλœ ν‘œμ΄λ‹€.

이름 (λͺΈλ¬΄κ²Œ, ν‚€) 덩치 λ“±μˆ˜
A (55, 185) 2
B (58, 183) 2
C (88, 186) 1
D (60, 175) 2
E (46, 155) 5

μœ„ ν‘œμ—μ„œ C보닀 더 큰 덩치의 μ‚¬λžŒμ΄ μ—†μœΌλ―€λ‘œ CλŠ” 1등이 λœλ‹€. 그리고 A, B, D 각각의 λ©μΉ˜λ³΄λ‹€ 큰 μ‚¬λžŒμ€ CλΏμ΄λ―€λ‘œ 이듀은 λͺ¨λ‘ 2등이 λœλ‹€. 그리고 E보닀 큰 λ©μΉ˜λŠ” A, B, C, D μ΄λ ‡κ²Œ 4λͺ…μ΄λ―€λ‘œ E의 λ©μΉ˜λŠ” 5등이 λœλ‹€. μœ„ κ²½μš°μ— 3λ“±κ³Ό 4등은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. μ—¬λŸ¬λΆ„μ€ 학생 Nλͺ…μ˜ λͺΈλ¬΄κ²Œμ™€ ν‚€κ°€ λ‹΄κΈ΄ μž…λ ₯을 μ½μ–΄μ„œ 각 μ‚¬λžŒμ˜ 덩치 λ“±μˆ˜λ₯Ό κ³„μ‚°ν•˜μ—¬ 좜λ ₯ν•΄μ•Ό ν•œλ‹€.

μž…λ ₯

첫 μ€„μ—λŠ” 전체 μ‚¬λžŒμ˜ 수 N이 주어진닀. 그리고 μ΄μ–΄μ§€λŠ” N개의 μ€„μ—λŠ” 각 μ‚¬λžŒμ˜ λͺΈλ¬΄κ²Œμ™€ ν‚€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ–‘μ˜ μ •μˆ˜ x와 yκ°€ ν•˜λ‚˜μ˜ 곡백을 두고 각각 λ‚˜νƒ€λ‚œλ‹€.

좜λ ₯

μ—¬λŸ¬λΆ„μ€ μž…λ ₯에 λ‚˜μ—΄λœ μ‚¬λžŒμ˜ 덩치 λ“±μˆ˜λ₯Ό κ΅¬ν•΄μ„œ κ·Έ μˆœμ„œλŒ€λ‘œ 첫 쀄에 좜λ ₯ν•΄μ•Ό ν•œλ‹€. 단, 각 덩치 λ“±μˆ˜λŠ” 곡백문자둜 λΆ„λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€.

πŸ“Œ μ½”λ“œ

n = int(input())
group = []
rank = 1
groupRank = []

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

for i in range(len(group)):
    for j in range(len(group)):
        if group[i][0] < group[j][0] and group[i][1] < group[j][1]:
            rank += 1

    groupRank.insert(i,rank)
    rank = 1


for i in groupRank:
    print(i,end=' ')

πŸ“Œ 풀이

λ¬΄κ²Œμ™€ ν‚€λ₯Ό κΈ°μ€€μœΌλ‘œ μžμ‹ λ³΄λ‹€ 큰 μ‚¬λžŒλ“€μ΄ 쑴재 ν• μˆ˜λ‘ λ“±μˆ˜λ₯Ό μ¦κ°€μ‹œν‚΄
if 쑰건문을 μ΄μš©ν•˜μ—¬ weight 와 height λͺ¨λ‘ 클 λ•Œμ—λ§Œ μžμ‹ μ˜ λ“±μˆ˜ κ°’ 증가

πŸ’ λ˜λŒμ•„ 보기

μ˜€λž«λ™μ•ˆ μ•Œκ³ λ¦¬μ¦˜ 손을 놓고 μžˆμ—ˆλŠ”λ° 생각보닀 문제λ₯Ό μ–΄λ ΅κ²Œ 풀지 μ•Šμ•˜μŒ 빨리 단계λ₯Ό 더 밟고 μ˜¬λΌκ°€μ•Όκ² λ‹€λŠ” 생각쀑 πŸ€”
profile
Junior BackendEngineer 😎

0개의 λŒ“κΈ€