코딩 테스트/프로그래머스

[Python] 프로그래머스 수열과 구간 쿼리 4

위시리 2024. 9. 9. 14:06

문제

 

문제 분석

  • 1차원 배열 arr, 2차원 배열 queries
  • queries[n][3]이라고 하자
  • queries의 각 원소는 s,e,k에 대응
  • 조건1 : s<= i <= e인 모든 i에 대해
  • 조건2 : i가 k의 배수이면
  • arr[i] + 1
  • 최종적으로 return된 arr은 조건 1에 속하지 않아 처리 되지 않는 arr까지도 포함 (수열과 구간 쿼리 3과의 차이점)
  • 즉, 입력된 arr 크기만큼 return
  • arr은 queries의 n크기만큼 반복하면서 계속 업데이트

 

코드 설계

  • s,e,k를 가져온다.
  • arr 배열의 크기만큼 반복하면서
  • 만약 i가 s <= i <= k 라면 조건 2~ / 아니라면 그대로 answer.append

 

1차

def solution(arr, queries):
    answer = []

    for s,e,k in queries:
        for i in arr:
            if i>=s and i<=e and (i%k==0) :
                answer.append(arr[i]+1)
            else:
                answer.append(arr[i])
    return answer

arr = [0, 1, 2, 4, 3]
queries = [[0, 4, 1],[0, 3, 2],[0, 3, 3]]
print(solution(arr, queries))

## 결과 : [1, 2, 3, 4, 5, 1, 1, 3, 3, 4, 1, 1, 2, 3, 5]

arr이 계속 업데이트 되어야 하는데 이어서 append가 됨. 

 

2차

그러면 반목문을 다 돌고나서 append하면 되지 않을까?

def solution(arr, queries):
    answer = []

    for s,e,k in queries:
        for i in arr:
            if i>=s and i<=e and (i%k==0) :
                arr[i] += 1
            # else:
            #     answer.append(arr[i])

    for i in range(len(arr)):
        answer.append(arr[i])

    return answer

arr = [0, 1, 2, 4, 3]
queries = [[0, 4, 1],[0, 3, 2],[0, 3, 3]]
print(solution(arr, queries))

## 결과 : [1, 2, 4, 4, 5]

입력한 arr의 크기만큼 출력되었지만 제대로 안됨 > 그렇다면 반복문 안에서 뭔가 잘못되고 있는건가? > 디버깅을 해보자

 

3차 (최종)

def solution(arr, queries):
    for s,e,k in queries:
        for i in range(s,e+1):
            if i % k == 0:
                arr[i] += 1
    return arr
    
    ## 결과 : [3, 2, 4, 6, 4]

결국 해결을 하지 못해 답을 봤다.. 항상 답을 보면 너무 간단하다.

그냥 s~e 범위에서 i를 놓고 그 i값이 k의 배수라면 arr[i] 값을 업데이트 해주면 끝