[프로그래머스] 등차수열의 특정한 항만 더하기

devel_liz·약 11시간 전
1

코딩테스트

목록 보기
5/8

🗒 문제



📝 나의 문제풀이

class Solution {
    fun solution(a: Int, d: Int, included: BooleanArray): Int {
        var answer: Int = 0
        included.forEachIndexed { i, value ->
                if(included[i] == true){
                   answer += (a + d*i)
                }
        }
        return answer
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(a: Int, d: Int, included: BooleanArray) = included.indices
    .filter { included[it] }
    .sumOf { a + d * it }
}

🖊 문제 풀이 시 알면 좋을 것

  • 등차수열

    • 각 항의 차이가 일정한 수열을 말해요. 이 일정한 차이를 공차라고 부르며, 등차수열의 일반적인 형식은 다음과 같아요
      • a, a + d, a + 2d, a + 3d, ...
        여기서 a는 첫번째 항, d는 공차(각 항 사이의 일정한 차이)
  • forEachIndexed

    • 리스트나 배열의 각 항목과 인덱스에 대해 작업을 수행할 때 사용하는 함수.
    • 항목뿐 아니라 해당 항목의 인덱스를 함께 제공.
    • 단순히 모든 요소를 순회하며 작업할 때 유용.
      listOf(10, 20, 30).forEachIndexed { index, value ->
       println("Index: $index, Value: $value")
      }
  • indices

    • 리스트나 배열의 유효한 인덱스 범위를 나타내는 프로퍼티.
    • list.indices는 0 until list.size와 동일.
      • 0 until list.size는 끝값(list.size) 직전까지 포함.
    • 유효한 인덱스만 접근하도록 보장.
      val list = listOf("A", "B", "C")
      for (i in list.indices) {
       println("Index $i: ${list[i]}")
      }
  • filter
    • 리스트나 배열에서 조건을 만족하는 항목만 걸러내는 함수.
    • 조건(Predicate)을 만족하는 항목들만 새로운 리스트로 반환.
    • 원본 데이터는 변경되지 않음.
      val evenNumbers = listOf(1, 2, 3, 4).filter { it % 2 == 0 }
      println(evenNumbers) // [2, 4]
  • sumOf
    • 리스트나 배열의 항목들을 합계로 변환 및 반환.
    • 각 항목을 변환한 후 합계를 계산.
    • 숫자뿐 아니라 특정 계산 결과(예: 객체의 특정 속성의 합)를 구할 때도 유용.
      • 예: students.sumOf { it.age }
    		val total = listOf(1, 2, 3).sumOf { it * 2 }
    		println(total) // 12

📌 마치며

이 문제는 등차수열이라는 개념을 알아야 문제를 풀 수 있다. 등차수열을 알지 못하면 문제 조차 이해할 수 없어 풀 수 없는 문제이다. 때문에, 나도 등차수열이라는 것을 처음 접하고 어떤 것인지 검색해봤고 등차수열이 항의 차이가 일정한 수열이라는 것을 알고 풀었더니 금방 풀 수 있었다.

profile
Android zizon

0개의 댓글