from itertools import combinations_with_replacement
from collections import Counter
def solution(n, info):
answer = [-1]
max_gap = 0
for arrow in combinations_with_replacement(range(10, -1, -1), n):
apeach, lion = 0, 0
cnt = Counter(arrow)
info2 = [0 for _ in range(11)]
for i in range(11) :
info2[i] = cnt[10-i]
if info[i] > info2[i] :
apeach += (10-i)
elif info[i] < info2[i]:
lion += (10-i)
elif info[i] == info2[i] and info[i] != 0:
apeach += (10-i)
if lion > apeach :
gap = lion - apeach
if gap > max_gap :
max_gap = gap
answer = info2
elif gap == max_gap:
for i in range(10, -1, -1) :
if info2[i] > answer[i] :
answer = info2
break
return answer
중복 조합이랑 개수 세는 Counter 라이브러리 사용해서 풀었다
사실 이 문제 도저히 감이 안 와서 다른 분 블로그 참고했음 .. 히히
apeach 랑 lion 은 각각 총 점수를 의미하고,
만약 lion 점수가 더 크면 gap 계산해서 기존에 max_gap 보다 같거나 크면 값 바꿔주게끔 함
라이언이 가장 큰 점수 차이로 우승할 수 있는 방법이 여러 가지 일 경우,
가장 낮은 점수를 더 '많이' 맞힌 경우를 return 해주세요.
이 조건 봤을 때 어차피 10점부터 0점 순으로 내려오게 했으니까
gap >= max_gap 해 주면 알아서 될 줄 알았는데 아니었고 ,,
포인트는 가장 낮은 점수를 더 '많이' 였다 ㅠ 이거때매 엄청 헤맴
저 조건 해결 못하면 이렇게 8, 18번 굴레에 빠지게 됩니다 ..^^&
if lion > apeach :
gap = lion - apeach
if gap > max_gap :
max_gap = gap
answer = info2
elif gap == max_gap:
for i in range(10, -1, -1) :
if info2[i] > answer[i] :
answer = info2
break
그리고 다른 분 코드랑 비교해보다가 유레카 외치고 드뎌 품 ㅠ
마지막 if 문에서 info2[i] > answer[i] 로 조건을 줘 버리면
가장 낮은 점수가 어피치에 해당하는 경우를 무시하는 코드였던 것임
라이언 점수가 어피치보다 클 때만을 기다렸던거니께 ,,,
if lion > apeach :
gap = lion - apeach
if gap > max_gap :
max_gap = gap
answer = info2
elif gap == max_gap:
for i in range(10, -1, -1) :
if info2[i] != 0 or answer[i] != 0 :
if info2[i] > answer[i] :
answer = info2
break
이렇게 쓰고 왜 안 되는지 또 한참을 고민했다
생각해보니까 기존꺼 answer 이 더 큰 경우가 있을텐데 또 그거 무시하고
현재 info2 가 더 큰 점수 있을 때만을 기다렸다가 answer 갱신해준거임,, ㅎㅎ,,,,, 바본가 ,,,
if lion > apeach :
gap = lion - apeach
if gap > max_gap :
max_gap = gap
answer = info2
elif gap == max_gap:
for i in range(10, -1, -1) :
if info2[i] != 0 or answer[i] != 0 :
min_idx = i
break
if info2[min_idx] > answer[min_idx] :
answer = info2
그래서 기존꺼 answer 이랑 현재 info2 랑 과녁 0 부터 비교해나가다가
둘 중 하나라도 1 점 이상되는 순간 min_idx 에 인덱스 저장하고 바로 break 해줌.
그리고 드디어
험난했다 진짜 ..... ㅠ ㅠ
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv2 - 2021 KAKAO BLIND RECRUITMENT] 메뉴 리뉴얼 (Python) (0) | 2022.09.25 |
---|---|
[프로그래머스 Lv2] N-Queen (Python) (1) | 2022.09.22 |
[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] k진수에서 소수 개수 구하기 (Python) (0) | 2022.09.16 |
[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산 (Python) (0) | 2022.09.16 |
[프로그래머스 Lv1 - 2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (Python) (0) | 2022.09.07 |