파란색가운의 개발 블로그
[이코테] CH03 그리디 실전문제 1번 모험가 길드 본문
import sys
# sys.stdin.readline()
from collections import deque
sys.setrecursionlimit(100000000)
import heapq
INF = 1e9
N = int(input())
x = list(map(int,sys.stdin.readline().split()))
x.sort()
count = 0
temp = x[0]
number = 0
for i in range(len(x)):
temp = max(temp,x[i])
if x[i] <= temp: # 만약 temp값보다 x[i] 원소가 작거나 같다면?
number +=1 # 그룹 멤버로 추가할 수 있다.
if x[i] > temp: # 만약 기준인 temp값을 넘어간다면 ? (해당 원소가 더 큰 인원수를 필요로 하는 경우)
number = 0 # 그룹 멤버로 세던 넘어를 초기화해준다.
temp = x[i] # temp값을 다시 초기화
if number == x[i]: # 만약 x[i]가 지금까지 그룹의 멤버 수와 같다면(이제 그룹 카운팅을 해야하는 시점)
count +=1 # 그룹 개수 카운팅
number = 0 #그룹 멤버 카운트 0으로 초기화
temp = x[i] # temp값 또한 초기화
print(count)
조금 코드가 복잡할 수 있지만 열심히 달아보았습니다.
정렬시키고 하는건 답지와 유사하지만 ..
답지
for i in x:
number +=1
if number >=i:
count +=1
number = 0
너무 간단하죠 ..
한마디로 현재 그룹에 하나씩 포함
- 현재 그룹 멤버 수 >= 현재 공포도 이상
그룹 카운팅, 멤버 초기화
로직은 똑같은데 코드가 너무 다르죠
간결화시키는걸 많이 연습해야겠습니다.
'알고리즘 문제 풀이 > 이코테' 카테고리의 다른 글
[이코테] CH03 그리디 실전문제 3번 문자열 뒤집기 (0) | 2023.11.17 |
---|---|
[이코테] CH03 그리디 실전문제 2번 곱하기 혹은 더하기 (0) | 2023.11.17 |
[이코테] CH03 그리디 실전문제 1이 될 때 까지 (0) | 2023.11.15 |
[이코테] CH03 그리디 실전문제 숫자 카드 게임 (0) | 2023.11.13 |
[이코테] CH03 그리디 실전문제 큰수의법칙 (1) | 2023.11.13 |