일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 홈플러스
- 2차계엄
- 원스휴먼 동물
- 원스휴먼 쿠폰
- 원스휴먼 사료
- 원스휴먼 요리
- 계엄령
- 원스휴먼 황금양 구하기
- 레시피 파밍
- 비상계엄령
- 원달러환율
- 1203계엄령
- 믹스커피추천
- 윤석열
- 원스휴먼 황금양털파밍
- 유광버섯 통조림
- 2차 비상계엄
- 계엄령 외신반응
- 원스휴먼 스타크롬
- 원스휴먼 레시피 파밍
- 홈플러스 시그니처 모카골드믹스커피
- 믹스커피
- 일론머스크
- 커피추천
- 국방부
- 원스휴먼 먹이
- 원스휴먼 레시피
- 시그니처
- 원스휴먼 황금양
- Today
- Total
0101011001010111
kotlin _ shuffled() /takeLast/take /drop/dropLast/slice 본문
로또 자동번호 생성을 만들어봅시다.
이것은 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)는 난수 생성기를 시작할 때 사용되는 초기 값입니다.
컴퓨터에서 "무작위" 수를 생성할 때 사실은 완전히 무작위가 아니라 시작점이 필요합니다.
이 시작점을 '시드'라고 합니다.
무작위로 숫자를 생성할 때마다 다른 시드를 사용하면 다른 숫자 시퀀스가 생성됩니다.
그러나 같은 시드를 사용하면 난수 생성기는 항상 같은 숫자 시퀀스를 생성합니다.
이것이 왜 유용한지 생각해보세요:
- 재현 가능성: 예를 들어, 게임이나 시뮬레이션에서 동일한 시나리오를 반복적으로 테스트해야 할 때 동일한 시드를 사용하면 매번 같은 "랜덤" 결과를 얻을 수 있습니다.
- 디버깅: 버그를 발견했을 때, 문제를 재현하기 위해 동일한 시드를 사용하여 "랜덤" 프로세스를 다시 실행할 수 있습니다.
대충 넘어가자 앞으로 쓸일 있음 알겠지 뭐.
+) 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]
}
'Kotlin > ★정예★반 숙제' 카테고리의 다른 글
정예반 숙제! 8.23일! (1) | 2023.08.23 |
---|---|
Kotlin - 문자열에서 특정 알파벳 a의 개수 알아보기. (0) | 2023.08.10 |
kotlin_조건문, 반복문_문제만들어보자 2/5 [문제 : 두 숫자 중 큰 숫자를 찾아내기_while 사용 : 제대로 대답할때까지 나갈 수 없는 고구마] (4) | 2023.08.09 |
kotlin / 조건문, 반복문/ 문제만들어보자 1/5 /문제 : 두 숫자 중 큰 숫자를 찾아내기./ return 사용 (0) | 2023.08.09 |
정예반 숙제 : 조건문, 반복문 '소수'인지 아닌지 판별기 만들기 (0) | 2023.08.09 |