본문 바로가기
코딩테스트

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

by liz_devel 2025. 1. 17.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
            
       queries.map{ (a,b) ->
           for(i in a..b){
               arr[i] += 1
           }
         }
              return arr
    }
}

 


📝 다른 사람의 문제 풀이

class Solution {
    fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
        var answer: IntArray = intArrayOf()
        queries.forEach { (s, e) ->
            (s..e).forEach { arr[it]+= 1 }
        }
        return arr
    }
}

🖊 문제 풀이 시 알면 좋을 것

forEach

  • 역할: 컬렉션의 각 원소에 대해 반복 작업을 수행하며, 반환값 없이 단순히 작업만 수행.
  • 구조:
collection.forEach { element -> 
    // 작업 수행
}
  • 특징:
    • 반환값이 필요 없는 작업에 적합.
    • 람다를 사용해 간결한 코드를 작성 가능.
  • 예제: 
val numbers = listOf(1, 2, 3)
numbers.forEach { println(it * 2) }
// 출력: 2, 4, 6

 

 

(s..e) (Range Operator)

  • 역할: s부터 e까지의 범위를 생성.
  • 구조:
val range = s..e
  • 특징:
    • 범위를 표현하며, for 루프나 반복 메서드에서 사용 가능.
    • s와 e를 포함하는 닫힌 범위(closed range).
      * 닫힌 범위 (Closed Range)란 범위의 시작값과 끝값을 모두 포함하는 범위를 의미합니다.
    • step을 사용해 간격 조정 가능.
  • 예제: 
for (i in 1..5) {
    println(i) // 출력: 1, 2, 3, 4, 5
}
 

 


📌 마치며

 

map (나의 문제풀이에서 사용)

  • 컬렉션의 각 원소에 대해 변환 작업을 수행하고, 변환된 값을 모아 새로운 리스트를 반환.
  • 특징:
    • 기존 컬렉션을 변환만 할 때 적합.
    • 반환값이 필요하지 않은 작업에서는 적합하지 않음.
 
val numbers = listOf(1, 2, 3)
val result = numbers.map { it * 2 }
println(result) // [2, 4, 6]

나의 문제풀이에서의 문제점:

  • map은 변환된 값을 새로운 리스트로 반환하지만, 반환값이 사용되지 않아 불필요한 작업이 되었다
  • 배열(arr)을 직접 수정할 때는 map 대신 다른 메서드가 적합하다

 

forEach (다른 사람의 문제풀이에서 사용)

  • 컬렉션의 각 원소에 대해 작업을 수행하며, 반환값 없이 단순한 반복 작업을 수행.
  • 특징:
    • 반환값이 필요하지 않은 작업에 적합.
    • 컬렉션 원소를 수정하거나 다른 작업을 수행할 때 유용.
val numbers = listOf(1, 2, 3)
numbers.forEach { println(it * 2) }
// 출력: 2, 4, 6

다른 사람 문제풀이에서의 장점:

  • 배열(arr)을 직접 수정하려는 목적에 적합.
  • 반환값 없이 작업만 수행하므로 더 간결하고 효율적.
반응형