코딩테스트

[프로그래머스] 전국 대회 선발 고사

liz_devel 2025. 2. 6. 20:36

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(rank: IntArray, attendance: BooleanArray): Int {
      val student = rank.filterIndexed{ i, v -> attendance[i] == true}.sorted().take(3)
      return 10000 * rank.indexOf(student[0]) + 100 * rank.indexOf(student[1]) + rank.indexOf(student[2])
    }
}

 


📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    fun solution(rank: IntArray, attendance: BooleanArray): Int {
        val result = rank.mapIndexed { i, v -> i to v }
            .filter { attendance[it.first] }
            .sortedBy { it.second }
        return result[0].first * 10000 + result[1].first * 100 + result[2].first
    }
}

🖊 문제 풀이 시 알면 좋을 것

filterIndexed { index, value -> 조건 }

  • index와 value를 이용해 특정 조건을 만족하는 요소만 필터링.
  • 원본 리스트나 배열을 변경하지 않고 새로운 리스트 반환.
  • 반환 타입: List<T> (원본 배열이 IntArray면 List<Int> 반환)
val rank = intArrayOf(3, 1, 4, 2)
val attendance = booleanArrayOf(true, false, true, true)

val filtered = rank.filterIndexed { i, v -> attendance[i] }
println(filtered) // [3, 4, 2] (출석한 학생만 필터링)

 

sorted()

  • 리스트의 요소를 오름차순으로 정렬해 새로운 리스트 반환.
  • 원본 리스트를 변경하지 않음.
  • 반환 타입: List<T>
val sortedList = listOf(3, 1, 4, 2).sorted()
println(sortedList) // [1, 2, 3, 4]

 

 

sortedBy { it.필드 }

 

  • 특정 기준(필드 값)을 기준으로 오름차순 정렬.
  • Pair, 데이터 클래스, 객체 리스트 등에 유용함.
  • 반환 타입: List<T> (예: List<Pair<Int, String>>)
val students = listOf(3 to "A", 1 to "B", 4 to "C", 2 to "D")
val sortedStudents = students.sortedBy { it.first }
println(sortedStudents) // [(1, "B"), (2, "D"), (3, "A"), (4, "C")]

 

 

 

take(n)

 

  • 리스트에서 앞 n개의 요소만 가져옴.
  • 리스트 크기가 n보다 작으면 있는 만큼 반환.
  • 반환 타입: List<T> (예: List<Int>)
val top3 = listOf(5, 3, 1, 4, 2).sorted().take(3)
println(top3) // [1, 2, 3]

 

 

 

indexOf(value)

 

  • 리스트나 배열에서 특정 값의 인덱스 반환.
  • 값이 없으면 -1 반환.
  • 반환 타입: Int
val rank = listOf(3, 1, 4, 2)
println(rank.indexOf(1)) // 1

 

반응형