https://programmers.co.kr/learn/courses/30/lessons/92342
유의 사항
- 화살을 맞춘 개수를 저장하고 정렬하는데 있어서 주의해야 한다.
- 정렬에 대한 가중치가 앞자리가 아닌 뒷자리 에 있으므로 값을 저장할 때 뒤집어서 저장한 후
- 내림 차순으로 정렬해 가장 큰 값을 가져와 해당 값을 뒤집으면 가장 낮은 점수를 많이 맞춘 순서대로 정렬된 값을 가져올 수 있다.
cases = [] maxDiff: int = 0 results = []
def getScore(index: int): return 10 - index
def calScores(ryan: list, apeech: list) -> None: diff: int = 0 apeech_score: int = 0 ryan_score: int = 0 global maxDiff
for i in range(11): if apeech[i] == 0 and ryan[i] == 0: continue
if ryan[i] > apeech[i]: ryan_score += getScore(i) else: apeech_score += getScore(i)
diff = ryan_score - apeech_score if diff <= 0: return
if diff >= maxDiff: oneCase: str = ''.join(list(map(str, ryan[::-1]))) if(diff > maxDiff): results.clear() maxDiff = diff results.append(oneCase)
def makeAllCase(start: int, choice: int, n: int, ryan: list) -> None: if(choice >= n): cases.append(ryan.copy()) return
for i in range(start, 11): ryan[i] += 1 makeAllCase(i, choice+1, n, ryan) ryan[i] -= 1
def solution(n, info): answer = [] ryan = [0] * 11 makeAllCase(0, 0, n, ryan)
for case in cases: calScores(case, info)
if len(results) > 0: results.sort(reverse=True) answer = list(map(int, results[0][::-1])) else: answer.append(-1)
return answer
|