배구 경기의 점수를 나타내는 하나의 이진 문자열이 있다고 가정하면 다음 조건에 따라 경기의 승자를 찾아야 합니다. -
-
두 팀이 서로 경쟁하며 15점을 먼저 득점한 팀이 승자가 됩니다. 단, 양 팀 모두 14점에 도달한 경우는 예외입니다.
-
양 팀이 14점에 도달했을 때 2점 차로 앞서는 팀이 승자가 됩니다.
주어진 이진 문자열에서 0은 팀이 1점을 잃음을 나타내고 1은 팀이 1점을 얻음을 나타냅니다. 우리는 팀이 경기에서 이기거나 졌는지 확인해야 합니다.
따라서 입력이 점수 ="1001100110111001110011011"과 같으면 출력은 팀 승리가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
score_cnt :=[0,0]
-
범위 0에서 점수 크기까지의 i에 대해
-
pos :=ASCII of(score[i]) - ASCII of('0')
-
score_cnt[pos] :=score_cnt[pos] + 1
-
score_cnt[0]이 n 및 score_cnt[1] - n - 1과 같으면
-
"팀 패배" 반환
-
-
score_cnt[1]이 n과 같고 score_cnt[0]
-
"팀 승리" 반환
-
-
score_cnt[0]이 n - 1과 같고 score_cnt[1]이 n - 1과 같으면
-
score_cnt[0] :=0
-
score_cnt[1] :=0
-
루프에서 나오다
-
-
-
나는 :=나는 + 1
-
범위 i에서 점수 크기까지의 i에 대해
-
pos :=ASCII of(score[i]) - ASCII of('0')
-
score_cnt[pos] :=score_cnt[pos] + 1
-
if |score_cnt[0] - score_cnt[1]| 2와 같으면
-
score_cnt[0]> score_cnt[1]이면
-
"팀 패배" 반환
-
-
그렇지 않으면
-
"팀 승리" 반환
-
-
-
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def predictWinner(score, n):
score_cnt = [0,0]
for i in range(len(score)):
pos = ord(score[i]) - ord('0')
score_cnt[pos] += 1
if (score_cnt[0] == n and score_cnt[1] < n - 1):
return "Team lost"
if (score_cnt[1] == n and score_cnt[0] < n - 1):
return "Team won"
if (score_cnt[0] == n - 1 and
score_cnt[1] == n - 1):
score_cnt[0] = 0
score_cnt[1] = 0
break
i += 1
for i in range(i, len(score)):
pos = ord(score[i]) - ord('0')
score_cnt[pos] += 1
if (abs(score_cnt[0] - score_cnt[1]) == 2):
if (score_cnt[0] > score_cnt[1]):
return "Team lost"
else:
return "Team won"
score = "1001010101111011101111"
n = 15
print(predictWinner(score, n)) 입력
"1001010101111011101111"
출력
Team won