Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

파란색가운의 개발 블로그

[이코테] CH03 그리디 실전문제 1번 모험가 길드 본문

알고리즘 문제 풀이/이코테

[이코테] CH03 그리디 실전문제 1번 모험가 길드

파란색 가운 2023. 11. 16. 22:24
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

너무 간단하죠 .. 

한마디로 현재 그룹에 하나씩 포함 

- 현재 그룹 멤버 수 >= 현재 공포도 이상

그룹 카운팅, 멤버 초기화

 

로직은 똑같은데 코드가 너무 다르죠

간결화시키는걸 많이 연습해야겠습니다.