์ฐธ๊ณ ) ์ด๊ฒ์ด ์ทจ์
์ ์ํ ์ฝ๋ฉํ
์คํธ๋ค with ํ์ด์ฌ ์ฑ
์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๋ฌธ์ ์ ์ฝ๋์
๋๋ค.
๋ฐ๋ผ์ ๋ฌธ์ ๋ ์์ธํ๊ฒ ์ ์ง ์๊ณ , ๊ฐ๋จํ ์ค๋ช
๊ณผ ์ ์ฝ๋๋ง ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.
๋ชจํ๊ฐ ๊ธธ๋ (ebook๊ธฐ์ค p.313)
- ๋ชจํ๊ฐ N๋ช
- ๊ฐ ๋ชจํ๊ฐ ๋ง๋ค '๊ณตํฌ๋'๋ฅผ ์ธก์ , ๊ณตํฌ๋๊ฐ ๋์ ๋ชจํ๊ฐ๋ ์ฝ๊ฒ ๊ณตํฌ๋ฅผ ๋๊ปด ์ํ์ํฉ ๋์ฒ๋ฅ๋ ฅ ์ ํ
- ๊ธธ๋์ฅ์ ๊ณตํฌ๋๊ฐ x ์ธ ๋ชจํ๊ฐ๋ ๋ฐ๋์ x๋ช
์ด์์ผ๋ก ๊ตฌ์ฑํ ๋ชจํ๊ฐ ๊ทธ๋ฃน์ ์ฐธ์ฌํด์ผ ์ฌํ์ ๋ ๋ ์ ์์
- ์ต๋ ๋ช ๊ฐ์ ๋ชจํ๊ฐ ๊ทธ๋ฃน์ ๋ง๋ค ์ ์๋๊ฐ?
- N๋ช
์ ๋ชจํ๊ฐ์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์ฌํ์ ๋ ๋ ์ ์๋ ๊ทธ๋ฃน์ ์์ ์ต๋๊ฐ์ ๊ตฌํ์์ค.
##### ์
๋ ฅ์กฐ๊ฑด
- ์ฒซ์จ์ค N
- 1<= N <= 100,000
- ๋์จ์ค, ๊ณตํฌ๋์ ๊ฐ์ด N ์ดํ์ ์์ฐ์๋ก ์ฃผ์ด์ง.
<๋ฌธ์ ํ์ด>
1. ์ฒซ๋ฒ์งธ ์๋ (ํ๋ฆฐ๋ต์)
n = map(int, input())
people = list(map(int, input().split()))
def solution(n,people):
group = 0
people.sort()
while people: # people์ ์๋ฌด๋ ์์๋๊น์ง ์งํ
num_max = people.pop()
if num_max > len(people):
break
for i in range(0, num_max-1):
people.pop(0)
group += 1
return group
solution(n,people)
๋ฐ๋ณด๊ฐ์ด ์๊ฐํ๋ค. ์ถ๋ ฅ์ด ์ํ๋๋๋ก ๋์ค๋์ค ์์๋๋ฐ ์๊ฐํด๋ณด๋๊น '์ต๋'๊ทธ๋ฃน ์๋ผ๋ฉด, '์ต์'์ธ์์ผ๋ก ์ต๋ํ ๋ง์ ๊ทธ๋ฃน์ ๊ฒฐ์ฑํด์ผํ๋ค. ํ์ง๋ง ์ด ์ฝ๋๋ '์ต์'๊ทธ๋ฃน ์๋ฅผ ์ถ๋ ฅํ๋ ํํ๋ก ๊ตฌํํ๋ค.
2. ๋๋ฒ์งธ ์๋ (๋ง๋ ๋ต์)
n = map(int, input())
people = list(map(int, input().split()))
def solution(n, people):
cnt = 0
group = []
people.sort()
while people:
min_num = people.pop(0)
group.append(min_num)
if max(group) == len(group):
cnt += 1
group = []
return cnt
solution(n,people)
<์ค๋ต๋ ธํธ (์์๋ต์๊ณผ ๋น๊ต)>
์์จ๋ต์์ ๋จ์ํ ๋ง์ ๊ณผ if๋ฌธ์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค. if๋ฌธ ํน์ฑ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด count ๋๋ ํน์ฑ์ ์ ์๊ฐํ์ด์ผ ํ๋ค. ๋๋ ์ด ๊ณผ์ ์ ์กฐ๊ธ ๋ณต์กํ๊ฒ ์๊ฐํ ํ์ while๋ฌธ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋๋ ธ๊ณ , ์๊ฐ์ ์กฐ๊ธ ์ก์๋จน์๋ ๊ฒ ๊ฐ๋ค.