모험가 N명이 있고, 이들의 공포도를 기준으로 그룹을 구성할 것이다.
공포도가 X인 모함가는 반드시 X명 이상으로 구성한 모함가 그룹에 참여해야한다.
N명의 모험가에 대한 정보가 주어졌을 때, 최대로 몇 개의 모험가 그룹을 만들 수 있는지 구하기
모든 모험가를 특정 그룹에 넣을 필요는 없다.
아직 좀 부족해서 정확하게 코드를 짜지는 못하겠지만 대략 문제풀이 방법을 생각해보면,
그룹을 최대로 만드려면 그룹안의 사람 수를 적게 해야한다.
공포도가 제일 높은 사람을 뽑아서 그 사람의 공포도의 수만큼 인원을 채우는데
그 인원들은 그 다음으로 공포수가 큰 사람부터 채워넣는다.
이렇게 하면 그룹의 숫자는 최대로 만들 수 있을 것이라고 생각했는데....
정답 풀이를 보니 달랐다.
오름차순 정렬 이후에 공포도가 가장 낮은 모험가부터 하나씩 확인한다.
앞에서부터 공포도를 하나씩 확인하며 '현재 그룹에 포함된 모험가의 수'가 '현재 확인하고 있는 공포도 보다 크거나 같다면 이를 그룹'으로 설정한다.
정답 풀이를 보고 생각해보니까 모든 모험가를 특정 그룹에 넣을 필요가 없기 때문에
공포도가 낮은 사람부터 그룹을 결성해야 그룹의 수를 최대로 만들 수 있다는 생각이 들었다.
내 풀이대로 한다면 그룹을 결성하지 못한 사람은 공포도가 낮은 사람일 것이고
그 보다는 공포도가 높은 사람이 그룹을 결성하지 못하는 것이 그룹의 수가 높아지는데 좋을 것이다.
s = input("길이가 최대 20인 숫자 문자열입력 : ")
result = int(s[0])
for i in s[1:]:
if int(i) <=1 or result <=0:
result += int(i)
else:
result *= int(i)
print(result)
잘못된 풀이로 생각하고 있어서 잘 못풀다가 문제풀이 아이디어를 고치고 다시 풀었다.
입력받은 문자열의 첫글자를 result에 대입하고 두번째 글자부터 for문 돌리는 아이디어는 살짝 참고했다...
n = int(input())
data = list(map(int, input().split()))
data.sort() # 오름차순 정렬
result = 0 #총 그룹의 수
count = 0 #현재 그룹에 포함된 모험가의 수
for i in data: # 공포도를 낮은 것부터 하나씩 확인하며
count+=1 #현재 그룹에 해당 모험가를 포함시키기
if count >= i: #현재 그룹에 포함된 모험가의 수가 현재 공포도 이상이라면, 그룹 결성
result += 1 #총 그룹의 수 증가시키기
count = 0 #현재 그룹에 포함된 모험가의 수 초기화
print(result) # 총 그룹의 수 출력
우선 내 문제 풀이 방법이 틀렸었으니 문제풀이 방식도 배웠고,
count수를 늘려가면서 공포도와 비교하는 방법으로 코드를 짰다는 점
그룹 결성하면 총 그룹수 증가시키고 count는 초기화하기
아직 많이 부족하고 배울것이 많다...