준호씨의 블로그

hackerrank - Birthday Chocolate - Python3 본문

개발이야기/PS - Problem Solving, 알고리즘

hackerrank - Birthday Chocolate - Python3

준호씨 2020. 5. 23. 23:31

문제: https://www.hackerrank.com/challenges/the-birthday-bar/problem

Lily는 Ron의 생일에 나누고 주고 싶어 하는 초콜릿 바가 있습니다. 각 네모들은 하나의 숫자가 있습니다. 그녀는 세그먼트의 길이가 Ron의 탄생 월과 일치하고 사각형의 정수의 합이 출생일과 같도록 선택된 막대의 연속 세그먼트를 공유하기로 결정합니다. 그녀가 초콜릿을 나눌 수 있는 방법을 결정해야 합니다.

초콜릿 바가 s=[2,2,1,3,2]인 사각 배열이라고 가정합니다. 그녀는 Ron의 탄생일 d=4에 합산된 세그먼트를 찾고자 합니다. d=4는 자신의 출생 월과 길이가 m=2입니다. 이 경우 [2,2]와 [1,3]의 두 가지 세그먼트가 그녀의 기준을 충족시킵니다.

Function Description

birthday함수를 완성합니다. Lily가 초콜릿바를 나눌 수 있는 방법의 수를 나타내는 정수를 반환해야 합니다.

birthday는 다음의 파라미터들이 있습니다.

  • s: 초콜릿의 사각형 각각 숫자의 정수 배열
  • d: 론의 탄생일. 하나의 정수
  • m: 론의 탄생 월. 하나의 정수

Input Format

첫 번째 줄 n은 정수로 초콜릿바의 사각형의 개수

두 번째 줄 n은 스페이스로 나누어진 정수 s[i]로 초콜릿 사각형 위의 숫자입니다. 0<=i<=n.

세 번째 줄은 스페이스로 나누어진 정수 두 개로 d와 m입니다. 론의 탄생일과 탄생 월입니다.

Constraints

  • 1 <= n <= 100
  • 1 <= s[i] <= 5, (0 <= i < n)
  • 1 <= d <= 31
  • 1 <= m <= 12

Output Format

Lily가 초콜릿 바를 나누어 Ron과 공유할 수 있는 총방법의 수를 정수로 출력합니다.

풀이

템플릿 코드

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the birthday function below.
def birthday(s, d, m):

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input().strip())

    s = list(map(int, input().rstrip().split()))

    dm = input().rstrip().split()

    d = int(dm[0])

    m = int(dm[1])

    result = birthday(s, d, m)

    fptr.write(str(result) + '\n')

    fptr.close()

 

배열 s에서 처음부터 m 길이만큼의 배열만 따다가 부분 배열을 구합니다. 그 부분 배열의 합이 d와 같은 것의 개수를 세면 됩니다.

일단 s길이만큼 배열을 돌려야 되는데요. 다만 m 길이만큼의 합을 구하기 때문에 s길이에서 m만큼 빼고 1을 더합니다. 그렇게 하면 m길이만큼의 모든 부분 배열을 구할 수 있습니다.

찾아낸 부분 배열의 합이 d와 같은지 확인한 후 맞다면 카운트를 1 추가합니다.

def birthday(s, d, m):
    answer = 0
    for i in range(len(s)-m+1):
        if sum(s[i:i+m]) == d:
            answer += 1
    return answer

 

0 Comments
댓글쓰기 폼