풀이 시간 : 10m
모험가 길드 : 문제 설명
- 한 마을에 모험가가 N명 있습니다. 모험가 길드에서는 N명의 모험가를 대상으로 '공포도'를 측정했는데, '공포도'가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어집니다.
- 모험가 길드장인 동빈이는 모험가 그룹을 안전하게 구성하고자 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했습니다.
- 동빈이는 최대 몇 개의 모험가 그룹을 만들 수 있는지 궁금합니다. N명의 모험가에 대한 정보가 주어졌을 때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요.
아이디어
우선 값을 정렬하고, 공포도 = 그룹원 수이므로 정렬된 값을 for문으로 돌면서, 그룹원 수를 만족하는지 여부를 체크한 후 만족한다면 한 그룹이 탄생하고, 만족하지 못한다면 계속해서 그룹원을 생성해나가는 식으로 진행할 것.
My A :
def solution(G):
group = [] #완성된 그룹을 담을 빈 리스트
party = [] #그룹 인원을 담을 빈 리스트
G.sort() #값을 정렬
for i in G:
# 파티에 들어갈 인원 선별
if len(party) < i:
party.append(i)
# 그룹에 들어갈 파티 선별
elif len(party) >= i:
group.append(party)
party = []
party.append(i)
# 마지막 그룹 조건 충족 여부 체크
a = len(group)+1
for j in party:
if j > len(party):
a = a-1
return a
solution([2,3,1,2,2])
모범 답안 코드와 비교해보면 내가 한 코드가 얼마나 가독성이 떨어지는지 알 수 있었다.
Other A :
def solution(g):
g.sort()
answer = 0
count = 0
for i in g :
count += 1
if count >= i:
answer += 1
count = 0
return answer
solution([2,3,1,2,2])
문제를 풀며 느낀 점
나는 리스트에 조건을 만족하면 넣고, 그 리스트의 수를 세는 식으로 했었으나
사실은 그럴 필요가 없고, 조건에 맞다면 그냥 수만 count해주면 되는 것이였다.
'코딩테스트 연습' 카테고리의 다른 글
[Python] 이코테 2021 <구현> 왕실의 나이트 (0) | 2022.02.26 |
---|---|
[Python] 이코테 2021 <구현> 상하좌우 (0) | 2022.02.24 |
[Python] 이코테 2021 <구현> 시각 (0) | 2022.02.24 |
[Python] 이코테 2021 <그리디> 곱하기 혹은 더하기 (0) | 2022.02.23 |
[Python] 이코테 2021 <그리디> 1이 될 때까지 (0) | 2022.02.23 |