코딩 테스트/프로그래머스
[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] 값을 업데이트 해주면 끝