본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 10. 12.
728x90

[파이썬] 프로그래머스 Lv0. n보다 커질 때까지 더하기, 수열과 구간 쿼리 1

안녕하세요. 머킹입니다.

요즘 환절기라서 감기기운이 떨어지지 않네요.

다들 모쪼록 감기 조심하세요.

 


n보다 커질 때까지 더하기

 

문제 설명

정수 배열 numbers와 정수 n이 매개변수로 주어집니다. numbers의 원소를 앞에서부터 하나씩 더하다가 그 합이 n보다 커지는 순간 이때까지 더했던 원소들의 합을 return 하는 solution 함수를 작성해 주세요.

 

sum을 해서 더한 다음

이 수가 커지면 딱 나오도록 return 하는 함수를 만들어야겠습니다.

 

def solution(numbers, n):
    answer = 0
    for i, num in enumerate(numbers):
        answer += num
        
        if answer > n:
            return answer
        
    return answer

예전에 했던 문제의 답하고 비슷한 결이 나왔습니다.

 

def solution(numbers, n):
    return next(sum(numbers[:i + 1]) for i in range(len(numbers)) if sum(numbers[:i + 1]) > n)

다른 사람들의 풀이를 보는데 next라는 함수가 있네요.

궁금해서 찾아봤습니다.

 

next는 반복 가능 객체의 다음 요소 반환하는 함수라고 합니다.

 


수열과 구간 쿼리 1

 

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. 

queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.

 query마다 순서대로 s  i  e인 모든 i에 대해 arr [i]에 1을 더합니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

입출력 예시가 이러한데 여기서 문제는 저는 또 이해가 안 되기 시작했습니다...

왜.. s보다 크거나 같고 e보다 작거나 같은 모든 i들에 1을 더했는데2번째 줄에 1은 똑같을까요..?

 

와 저 진짜 바본가 봐요...인덱스를 못 보고 이렇게 문제를 풀고 있었네요 와..저는 s보다 크거나 같고 e보다 작거나 같은 수에 1을 더하는 거라고 이해해서왜 자꾸 결과가 저렇게 돼?라고 생각했는데 인덱스였어요ㅎㅎ..

def solution(arr, queries):
    for query in queries:
        s, e = query
        for i in range(s, e + 1):
            arr[i] += 1
    return arr

이 코드로 풀었습니다..


진짜 문제를 이해하는 게 얼마나 중요한지 다시 또 느끼네요..

대신 문제를 이해할 때의 짜릿함이 있네요!

내일 또 뵙겠습니다