이때 무작위로 배열하고자 하면 오랜 시간이 걸린다.
오랜 시간이 걸리지 않는 코드를 뽑아내시오.
32개의 풀이가 있습니다.
import random
lst = list(range(1,10)) # 숫자 범위
n = int(input('반복 횟수는 : ')) # 5
for x in range(n):
random.shuffle(lst)
for i in lst:
print(i, end = ' ')
print('')
반복 횟수는 : 5
6 4 2 1 3 7 5 9 8
8 3 7 4 1 2 6 5 9
4 1 8 6 2 7 9 3 5
5 9 3 8 1 7 4 2 6
3 9 7 4 6 2 8 1 5
from random import randint as rint
def one_to_nine():
a = [] #9개의 숫자를 배열한 빈 리스트 a
while len(a) < 9: #모든 9개의 숫자가 배열될 때까지 루프
b = rint(1,9) #1부터 9사이의 자연수 중 랜덤으로 추출된 숫자(int) b
if b not in a: #추출된 숫자가 A리스트 안에 없는 경우에만 배열 리스트에 포함
a.append(b)
return a #리스트 반환
list_one_to_nine = [print(one_to_nine()) for i in range(5)] #one_to_nine() 함수 5회 시행 - 5회 추출 및 배열
from random import *
n = 0
i = []
m = ''
num = 0
while num < 5:
while n < 9:
while True:
ran = randint(1,9)
cnt = i.count(ran)
if cnt == 0:
i.append(ran)
m = m + str(ran) +' '
break
elif cnt == 1:
continue
n += 1
n = 0
num += 1
print(m)
m = ''
i = []
배열(5개): 5 9 6 8 2 7 4 1 3 , 5 8 3 1 4 2 7 6 9 , 3 9 1 7 5 2 6 4 8 , 1 9 7 3 6 4 8 5 2 , 5 9 8 2 3 4 7 6 1
C#
Fisher-Yates Array Shuffle 알고리즘
using System;
using System.Linq;
namespace CD257
{
class Program
{
static void Main()
{
int[] pool = Enumerable.Range(1, 9).ToArray(); // pool = {1, 2, ..., 9}
for (int rpt = 0; rpt < 5; rpt++)
{
ShuffleArray<int>(pool); // shuffle array
Console.WriteLine($"{{{string.Join(", ", pool)}}}");
}
}
// Fisher-Yates Shuffle 알고리즘
public static void ShuffleArray<T>(T[] anArray)
{
Random random = new Random(); // 시간 기준 seed
for (int idx = 0; idx < anArray.Length; idx++)
{
int randomIndex = random.Next(idx, anArray.Length);
T tempValue = anArray[randomIndex];
anArray[randomIndex] = anArray[idx];
anArray[idx] = tempValue;
}
}
}
}
파이썬 3.8
출제자의 의도와는 다른 것 같지만..
초보라 꼼수를 써서... 헤헤
lis = ""
stop = cnt = 0
while stop < 5:
num = str(abs(hash(str(cnt))))
cnt += 1
for i in range(-2 , len(num)):
if num[i] not in lis and num[i] != "0" and len(lis) != 9:
lis += num[i]
elif len(lis) == 9 and stop < 5:
stop += 1
print(stop, ":", lis)
lis = ""
파이썬 3.8
에고 초보라 모르겠네요 ㅜㅜ
문자열에 집합 set() 함수를 사용해 랜덤한 순서의 문자열 리스트를 구하고,
1 ~ 9 를 넘버링 한 뒤 sorted() 함수로 정렬해서 뒤섞인 넘버링 숫자를 출력하는 방법
(간단하게 set() 함수를 반복문에서 돌리면 될 줄 알았더니 계속 같은 숫자만 출력 되네요)
n = "123456789"
print(["".join(list(zip( * sorted(zip(str(int("".join(set(n))) * (s ** 2)), n))))[1]) for s in range(1, 6)])
잘 한건지 모르겠네요 ^^; 결과는 원하는데로 나온것 같기는 헌디...
import random as r
for _ in range(5):
temp_list = []
list_init = [1,2,3,4,5,6,7,8,9]
while 0 < len(list_init):
idx = r.randint(0, len(list_init)-1)
temp_list.append(list_init[idx])
list_init.pop(idx)
print(temp_list)
import random
mylist=list(range(1,10))
random.shuffle(mylist)
print(mylist)
결과 [4, 9, 6, 1, 8, 3, 7, 2, 5] [1, 6, 3, 4, 2, 9, 8, 5, 7] [4, 8, 2, 6, 5, 1, 3, 7, 9] [5, 8, 3, 1, 7, 9, 4, 2, 6] [9, 7, 2, 5, 1, 8, 3, 6, 4] 문제의도같은건 모르겠네요
```{.python}
```from random import * number = [1,2,3,4,5,6,7,8,9] shuffle(number) print(number)
문제의도는 잘 모르겠네요.. 초보라서.. 이렇게라도 올려봐여
import random as r
k = [1,2,3,4,5,6,7,8,9]
i = int(input('반복하고싶은 횟수 입력:')) #여기서 5를 입력하면 섞인 리스트를 5개 얻을 수 있습니다.
while i > 0:
r.shuffle(k)
print(k)
i = i - 1
[8, 9, 6, 4, 5, 3, 2, 1, 7] [4, 3, 7, 2, 8, 9, 6, 5, 1] [7, 6, 9, 2, 8, 3, 4, 5, 1] [5, 1, 9, 6, 8, 2, 7, 4, 3] [8, 2, 5, 6, 7, 1, 4, 9, 3] 얻은 리스트 5개입니다.
코드는 다음과 같습니다.
import random
>>> list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in range(5):
... random.shuffle(list)
... print(list)
아래는 결과로 나온 값들입니다.
[8, 1, 9, 7, 5, 6, 3, 4, 2]
[8, 2, 7, 5, 4, 1, 3, 9, 6]
[5, 2, 6, 1, 7, 9, 4, 3, 8]
[2, 4, 7, 1, 3, 9, 8, 5, 6]
[4, 5, 8, 9, 6, 7, 3, 2, 1]
from random import *
for i in range(5):
list1 = [1,2,3,4,5,6,7,8,9]
list2 = []
while len(list2) < 9:
random_index = randint(0, len(list1)-1)
list2.append(list1[random_index])
list1.pop(random_index)
print(list2)
print('일 줄 알았는데 문제의도와는 정반대에 있었다')
ㅜㅜㅜㅜ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int arr1[9]={1,2,3,4,5,6,7,8,9};
int arr2[9]={0,};
int i,k;
srand(time(NULL));
for(i=0;i<9;i++)
{
while(1)
{
k= rand()%9;
if(arr1[k]!=0)
{
arr2[i]=arr1[k];
arr1[k]=0;
break;
}
}
printf("%d ",arr2[i]);
}
getch();
return 0;
}
[5 4 1 8 6 9 7 2 3] [8 4 7 5 1 6 3 2 9] [1 2 5 3 9 6 7 4 8] [6 2 3 1 9 4 7 8 5] [8 1 7 5 4 9 3 6 2]
정답 (C언어)
#include <stdio.h>
#include <Windows.h>
int main()
{
int ten[10] = { 1,2,3,4,5,6,7,8,9,10 };
int answer[10] = { 0, };
for (int i = 11; i > 1; i--)
{
srand(time(NULL));
int number = rand() % i;
if (number == 0)
number++;
int check = 0;
for (int j = 0; j < 10; j++)
{
if (ten[j] == 0)
continue;
else
check++;
if (check == number)
{
answer[11 - i] = ten[j];
ten[j] = 0;
break;
}
}
}
for (int a = 0; a < 10; a++)
{
printf("%d ", answer[a]);
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
while (1)
{
char a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
char temp, b = 0, c, num = 1;
srand(clock(NULL));
while (b <= 11)
{
while (num <= 9)
{
c = rand() % 9;
temp = a[b];
a[b] = a[c];
a[c] = temp;
num++;
}
b++;
}
printf("%d, %d, %d, %d, %d, %d, %d, %d, %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
printf("");
getchar();
}
}
결과 : [2, 1, 5, 4, 8, 6, 3, 9, 7], [9, 4, 6, 1, 5, 2, 7, 8, 3], [6, 2, 3, 4, 5, 7, 9, 8, 1], [6, 2, 3, 1, 5, 4, 7, 8, 9], [8, 9, 3, 4, 5, 6, 7, 2, 1],
import random
def Gen(num):
for i in range(num):
num_list = [1,2,3,4,5,6,7,8,9]
final = []
for i in range(9):
temp = random.randrange(0,len(num_list))
final.append(num_list.pop(temp))
print(final)
import random
a = list(range(1, 10))
for n in range(1, 6):
random.seed(n)
rearranged_a = random.sample(a, len(a))
print(rearranged_a)
import random
a = [1,2,3,4,5,6,7,8,9]
n=0
while n<5:
n+=1
random.shuffle(a)
for i in a:
print(i, end=' ')
print()
import java.util.Random;
public class Ex1 {
public static void main(String []args) {
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;
int g=0;
int h=0;
int i=0;
int j=0;
Random ran= new Random();
while(a ==b) {
a=ran.nextInt(9)+1;
}
while(b==a || b==c) {
b=ran.nextInt(9)+1;
}
while(c==a || c==b| c==d) {
c=ran.nextInt(9)+1;
}
while(d==a || d==b|| d==c || d==e) {
d=ran.nextInt(9)+1;
}
while(e==a || e==b|| e==c || e==d || e==f) {
e=ran.nextInt(9)+1;
}
while(f==a || f==b|| f==c || f==d || e==f ||f==g) {
f=ran.nextInt(9)+1;
}
while(g==a || b==g|| c==g || d==g || e==g || f==g ||g==h ){
g=ran.nextInt(9)+1;
}
while(h==a || b==h|| c==h || d==h || e==h || f==h ||g==h || h==i){
h=ran.nextInt(9)+1;
}
while(i==a || b==i|| c==i || d==i || e==i || f==i ||g==i || h==i || i==j){
i=ran.nextInt(9)+1;
}
System.out.println(a+" " +b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h+" "+i);
}//main
}//class
from random import randint
num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
swap_list = []
while len(num_list) > 1:
temp = num_list.pop(randint(0, len(num_list)-1))
swap_list.append(temp)
swap_list.append(num_list[0])
print(swap_list)
#include <stdio.h>
#include <stdlib.h>
int main() {
srand(time(NULL));
int i;
int i2;
char num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
char end[10] = {0,};
for(i = 0; i < 10; i++) {
re:;
end[i] = rand() % 10;
for(i2 = 0; i2 < i; i2++) {
if(end[i2] == end[i]) goto re;
}
printf("%d ", end[i]);
}
printf("\n");
return 0;
}
5 2 0 3 4 7 1 8 9 6
2 0 8 6 3 1 4 5 7 9
2 0 8 6 3 1 4 5 7 9
3 0 2 9 4 1 8 5 7 6
8 1 4 9 2 5 7 6 3 0
import java.util.Random;
public class NumberArray {
public static void main(String[] args) {
Random random = new Random();
int[] arNum = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 100; j++) {
int temp = arNum[0];
int mixIndex = random.nextInt(9);
arNum[0] = arNum[mixIndex];
arNum[mixIndex] = temp;
}
for (int j = 0; j < arNum.length-1; j++) {
System.out.print(arNum[j]+",");
}
System.out.print(arNum[8]+"\n");
}
}
}
6,4,2,8,1,3,7,9,5
3,8,4,6,1,9,5,2,7
8,9,6,7,4,5,2,1,3
9,5,6,3,1,4,2,8,7
3,2,8,4,9,6,1,7,5
public class java_0729_2 {
public static void main(String[] args) {
int[] list = {1,2,3,4,5,6,7,8,9};
Ran(5,list);
}
public static void Ran (int num,int[] list)
{
if(num == 0)
{
return;
}
int tmp;
for(int i = 0 ; i<list.length; i++)
{
int a =(int)(Math.random()*list.length);
for(int j = 0; j<list.length-1 ; j++)
{
tmp = list[j];
list[j] = list[a];
list[a] = tmp;
}
}
System.out.println(Arrays.toString(list));
Ran(num-1,list);
}
자바언어 초보자입니다! 정답맞나용??
from random import randint
base = list(range(1, 10))
result = []
maxi = 8
for i in range(9):
rand = randint(0, maxi)
result.append(base[rand])
base.pop(rand)
maxi -= 1
print(result)
from random import randint as ri
for i in range(5):
a=[]
while True:
b=ri(1,9)
if b not in a:
a.append(b)
if len(a)==9:
print(a)
break
5번의 값 출력을 위해 반복 for문 5번 돌도록 해두고 값 저장할 리스트 하나 만들어둔뒤 조건부 마무리 전까지 계속 반복할 while문 사용하여 마무리 했습니다.
import random
for i in range (5):
num=[]
while (1):
random_num=random.randint(1,9)
if random_num not in num:
num.append(random_num)
if len(num)>=9:
print (num)
break