0101011001010111

kotlin _ shuffled() /takeLast/take /drop/dropLast/slice 본문

Kotlin/★정예★반 숙제

kotlin _ shuffled() /takeLast/take /drop/dropLast/slice

[진주] 2023. 8. 14. 05:33
728x90
반응형

로또 자동번호 생성을 만들어봅시다.

이것은 shuffled() 함수를 이용할 수 있는데, 

코드를 보면 

fun main() {
    val lotto= 5

    println("로또 2017회차:")
    for (i in 1..lotto) {
        val lottos = (1..45).toList().shuffled().take(5)
        println(lottos)
    }
}

 

이렇게 결과값을 낼수 있습니다.

 

하나하나 설명하자면

로또 5000원치 자동으로 주세요 하면

일단 5줄의 번호를 뽑아야 하자낭 

 

그렇기 때문에

val lotto= 5

 

이렇게 써주고

for (i in 1..lotto) {

 

for문에서 이렇게 써주면 lotto는 5이니까 5번 돌아가게 할수있어 

굳이 i++ 이렇게 안써줘도 된다는 사실을 암

 

val lottos = (1..45).toList().shuffled().take(5)

이렇게썻잖아 ?

 

여기서 설명을 하자면, (1..45)는 1이상 45이하의 수를 .toList() 리스트에 넣는거야

그리고 .shuffled()로 무작위로 섞어주고 .take() 제일 앞에서부터 5개를 가져오는건데

 

 

shuffled()에 대해서 코딩으로 확인해보자.

fun main() {

    var a = listOf(1,2,3,4,5)
    a = a.shuffled()
    println(a)

}

결과값

이렇게 마구 잡이로 섞이는 것을 확인 할 수 있다.

 

shuffled()

1. shuffled()는 'List' 타입에 대해 사용 가능 한 확장 함수 입니다.

따라서, List 객체에서 직접 호출 할 수 있습니다. (.shuffled()로말야)

 

2. 반환값 : 이 함수는 원본 리스트의 요소를 무작위로 섞은 새로운 리스트를 반환합니다. 원본 리스트는 변경되지 않습니다.

 

3.시드 사용: shuffled()는 선택적으로 Random 객체를 인수로 받아 특정 시드값으로 무작위로 섞는 것을 제어할 수 있습니다. 같은 시드값을 사용하면 항상 같은 순서의 섞인 리스트를 반환합니다.

▲이 3번의 경우, 이해가 가지 않는다.

 

val originalList = listOf(1, 2, 3, 4, 5)
val shuffledList = originalList.shuffled()

println(originalList)  // [1, 2, 3, 4, 5]
println(shuffledList)  // 예를 들면, [3, 1, 4, 5, 2]

예제봐도 이해안감.

 

시드가 무엇인지 배워야 할듯...?

...........................

꼬꼬무...ㅠㅠ..

 


시드(seed)는 난수 생성기를 시작할 때 사용되는 초기 값입니다.

 

컴퓨터에서 "무작위" 수를 생성할 때 사실은 완전히 무작위가 아니라 시작점이 필요합니다.

 

이 시작점을 '시드'라고 합니다.

무작위로 숫자를 생성할 때마다 다른 시드를 사용하면 다른 숫자 시퀀스가 생성됩니다.

그러나 같은 시드를 사용하면 난수 생성기는 항상 같은 숫자 시퀀스를 생성합니다.

 

이것이 왜 유용한지 생각해보세요:

  1. 재현 가능성: 예를 들어, 게임이나 시뮬레이션에서 동일한 시나리오를 반복적으로 테스트해야 할 때 동일한 시드를 사용하면 매번 같은 "랜덤" 결과를 얻을 수 있습니다.
  2. 디버깅: 버그를 발견했을 때, 문제를 재현하기 위해 동일한 시드를 사용하여 "랜덤" 프로세스를 다시 실행할 수 있습니다.

 


대충 넘어가자 앞으로 쓸일 있음 알겠지 뭐.

 

 

 

 

+) take()에 관심있슴까?! ▼ 추가정보 

 

take말고 쓸수있는다른 함수들

takeLast(n: Int): List<T>
리스트의 마지막 부터 주어진 개수만큼의 요소들을 취합니다.

drop(n: Int): List<T>
리스트의 처음 부터 주어진 개수만큼의 요소들을 제거한 새로운 리스트를 반환합니다. 예를 들어, drop(5)는 처음 5개의 요소를 제외한 나머지를 반환합니다.

 

예를들면 리스트에 1 2 3 4 5 6 7 8 9 가 있다치면 drop(5)는 5개를 제외하고 나머지를 반환한다.

fun main() {
    var a = listOf(1,2,3,4,5,6,7,8,9).drop(5)
    println(a)
    
}

 


dropLast(n: Int): List<T>
리스트의 마지막 부터 주어진 개수만큼의 요소들을 제거한 새로운 리스트를 반환합니다.

 

ㄴdrop은 처음부터 제외, Last가 붙으면 뒷부분부터 제거 

slice(indices: IntRange): List<T>
주어진 인덱스 범위에 있는 요소들로 새로운 리스트를 생성합니다. 예를 들어, slice(2..5)는 인덱스 2부터 5까지의 요소를 포함하는 리스트를 반환합니다.
ㄴ 원하는 부분만 쏙쏙 슬라이스 해서 빼먹는 느낌이랄까... ?! 

fun main() {
    val fruits = listOf("Apple", "Banana", "Cherry", "Date", "Fig", "Grape")

    // 인덱스 1에서 3까지의 요소를 가져옵니다. (인덱스는 0부터 시작합니다.)
    val selectedFruits1 = fruits.slice(1..3)
    println(selectedFruits1)  // 출력: [Banana, Cherry, Date]

    // 인덱스 2와 4의 요소만 가져옵니다.
    val selectedFruits2 = fruits.slice(listOf(2, 4))
    println(selectedFruits2)  // 출력: [Cherry, Fig]
}
728x90
반응형