Where who wants to meet someone

수열과 구간 쿼리 4 본문

프로그래머스 알고리즘 문제 기록/코딩 기초 트레이닝

수열과 구간 쿼리 4

Lust3r 2024. 1. 15. 20:27
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

import Foundation

func solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] {
    var result = arr

    for query in queries {
        let (s, e, k) = (query[0], query[1], query[2])

        for i in s...e {
            if i % k == 0 {
                result[i] += 1
            }
        }
    }

    return result
}

- queries를 for문으로 돌면서 s, e, k를 정의하고, s <= i <= e 범위 내에서 k의 배수일 경우 result에 값을 더했다.

 

import Foundation

func solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] {
    var arr = arr
    queries.forEach { 
        let (s, e, k) = ($0[0], $0[1], $0[2])
        (s...e).forEach { if $0 % k == 0 { arr[$0] += 1 } }
    }
    return arr
}

- for문 대신 forEach를 사용하고, (s...e) 배열에서 바로 또 forEach를 사용하는 방식으로 문제를 풀 수 있었다.(다른 사람들의 답안)

- 둘 다 같은 방식으로 문제를 해결하고 있고, for문이냐 forEach냐 차이기 때문에 시간복잡도는 동일하다.
- 둘의 차이는 break나 continue, return을 사용하는 데 있다(https://developer.apple.com/documentation/swift/array/foreach(_:))

점수: +3

'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글

콜라츠 수열 만들기  (0) 2024.01.16
카운트 업  (0) 2024.01.16
배열 만들기 2  (0) 2024.01.16
수열과 구간 쿼리 2  (0) 2024.01.12
수열과 구간 쿼리 3  (0) 2024.01.11