배구 경기의 점수를 나타내는 하나의 이진 문자열이 있다고 가정하면 다음 조건에 따라 경기의 승자를 찾아야 합니다. -
-
두 팀이 서로 경쟁하며 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