백준 1292번 쉽게 푸는 문제 파이썬 풀이

2021. 3. 12. 18:38·알고리즘/백준

이름 그대로 단순하게 반복을 돌면서 수열을 진짜로 만든후에 입력된 A부터 B구간을 수열에서 잘라 합을구하면 됩니다

구현하는데는 3가지 방법이 있었습니다

1. 1부터 45까지 더하면 B의 최대범위인 1000을 넘는 1035이기 때문에 반복문을 무조건 45번 돌아서 모든 수열을 만드는 방법

2. 반복문을 돌면서 수열을 만들때마다 수열의 길이를 체크해 B를 넘어가면 종료하는 방법

3. 제너레이터 함수를 만든 후에 itertools에 있는 islice함수를 사용해 원하는 구간만 잘라 더하는방법

만약에 3번으로 푼다면 코드는 이렇게 나오는데

from collections import deque
from itertools import count, islice


def sequence():
    que = deque()
    c = count(1)
    while True:
        n = next(c)
        que.extend([n] * n)
        yield que.popleft()


A, B = map(int, input().split())
sliced=islice(sequence(), A - 1, B)
result = sum(sliced)
print(result)

squence 함수가 제너레이터 함수로, 만약에 for문으로 sequence함수를 출력하려고 하면 for문이 while True을 한것처럼 무한으로 반복되는데

이런 길이가 무한으로 나오는 제너레이터 함수를 리스트처럼 슬라이싱할수 있게해주는 함수가 islice 함수입니다

그래서  sequence를 islice로 잘라준다음 합을 출력하면 끝!

'알고리즘 > 백준' 카테고리의 다른 글

백준 2644번 촌수계산 파이썬 풀이  (0) 2021.03.19
백준 1094번 막대기 파이썬 풀이  (0) 2021.03.13
백준 5585번 거스름돈 C#풀이  (0) 2019.12.14
'알고리즘/백준' 카테고리의 다른 글
  • 백준 2644번 촌수계산 파이썬 풀이
  • 백준 1094번 막대기 파이썬 풀이
  • 백준 5585번 거스름돈 C#풀이
​​​​
​​​​
  • ​​​​
    개발 블로그
    ​​​​
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 오늘 배운것들
      • 프로젝트
        • NodeJs-유튜브 음질 뷰어
        • 직접 설계해본 ERD
        • URL 단축&방문수 분석 사이트
        • GPT로 영어 공부하기
      • 알고리즘
        • 백준
        • CodeSignal
        • 프로그래머스
      • JavaScript
        • Npm Modules
        • VanillaJS
        • NodeJS
      • CI&CD
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
​​​​
백준 1292번 쉽게 푸는 문제 파이썬 풀이
상단으로

티스토리툴바