프로그래머스 - 양궁 대회 (Python)

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]))
# print(answer)
else:
answer.append(-1)

return answer
Share