준호씨의 블로그
hackerrank - Birthday Chocolate - Python3 본문
문제: 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
'개발이야기 > PS - Problem Solving, 알고리즘' 카테고리의 다른 글
hackerrank - Migratory Birds - Python3 (0) | 2020.05.29 |
---|---|
hackerrank - Divisible Sum Pairs - Python3 (0) | 2020.05.28 |
hackerrank - Breaking the Records - Python3 (0) | 2020.05.17 |
hackerrank - Between Two Sets - Python3 (0) | 2020.05.16 |
hackerrank - Kangaroo - Python3 (0) | 2020.05.09 |