본문 바로가기

코딩테스트

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

https://school.programmers.co.kr/learn/courses/30/lessons/181922

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

 

문제 설명이 부족한 것 같아 정리해보았다.

문제에서 말하는 i가 값이 아니라 index를 뜻하는거라서 조금 헷갈리는 것 같다. 수열과 구간 쿼리 문제들에서 i는 다 index를 뜻하는 것 같다.

입출력 예시를 가지고 설명 고고씽

※ 0은 모든 수의 배수이다

입출력 예시 (arr) 프로세스 변동 값
[0, 1, 2, 4, 3] [0, 4, 1] 가지고 연산
 1) arr[0] ~ arr[4]에 대해                     >>   [0, 1, 2, 4, 3]
 2) 1의 배수인 index에 대하여           >>   1의 배수는 0, 1, 2, 3, 4
 3) arr[index] + 1
모든 값
[1, 2, 3, 5, 4] [0, 3, 2] 가지고 연산
 1) arr[0] ~ arr[3]에 대해                     >>  [1, 2, 3, 5, 4]
 2) 2의 배수인 index에 대해               >>  2의 배수는 0, 2
 3) arr[index] + 1
arr[0], arr[2]
[2, 2, 4, 5, 4] [0, 3, 3] 가지고 연산
 1) arr[0] ~ arr[3]에 대해                     >>  [2, 2, 4, 5, 4]
 2) 3의 배수인 index에 대해               >>  3의 배수는 0, 3
 3) arr[index] + 1
arr[0], arr[3]
[3, 2, 4, 6, 4]    

 

코드

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

 

코드는 생각보다 간단하다.

 

arr 값을 변경하지 않으려면 위에 answer = arr.copy() 를 추가해주면 될 것 같다.

 

그리고.. 문제에서 k가 0이 될 수도 있다고 했는데, 테스트케이스에는 해당 조건이 없는지,, 따로 처리를 안해줘도 통과가 된다고 한다.

 

이걸 다 반영해보면.. 이렇게 되려나...

def solution(arr, queries):
    answer = arr.copy()
    
    for s, e, k in queries :
        for i in range(s,e+1) :
            if k == 0 :
                print("k is zero")
            elif i%k == 0 :
                answer[i] += 1
    
    return answer