Where who wants to meet someone

수열과 구간 쿼리 2 본문

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

수열과 구간 쿼리 2

Lust3r 2024. 1. 12. 22:24
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

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

import Foundation

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

    for query in queries {
        var minimumValue = arr.max()! * 2

        for i in query[0]...query[1] {
            if arr[i] > query[2] && arr[i] < minimumValue {
                minimumValue = arr[i]
            }
        }

        minimumValue != arr.max()! * 2 ? result.append(minimumValue) : result.append(-1)
    }

    return result
}

- query 내에서 minimumValue를 설정하고, s와 e 사이(query[0] ~ query[1])에서 arr[i]가 k(query[2])보다 크고 minimumValue보다 작다면 minimumValue를 arr[i]로 변경

- 한 query가 끝날 때마다 minimumValue가 초기값이 아니라면 해당 값을 result 배열에 추가하고, 초기값이라면 해당하는 것이 없었으므로 -1을 추가

 

import Foundation

func solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] {
    return queries.map { 
        let (s, e, k) = ($0[0], $0[1], $0[2])
        return Array(arr[s...e]).filter { $0 > k }.min() ?? -1
    }
}

- 다른 사람들은 map 메서드를 통해 클로저로 반환된 값들의 모음 배열을 반환하는 식을 사용

- 조건의 s, e, k를 설정하고, arr에서 s와 e 인덱스 안의 값 중에서 k보다 큰 값을 필터링하고 그 중 가장 작은 값 또는 -1을 반환

점수: +5

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

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