이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

숫자 배열하기

  • 1에서 9까지의 숫자들이 있다.
  • 이 1에서 9까지의 숫자를 무작위로 배열하여
  • 2 3 5 6 7 9 1 4 8 과 같이 1~9의 숫자가 빠짐없이 배열되는 프로그램을 만들고자 한다.
  • 이때 무작위로 배열하고자 하면 오랜 시간이 걸린다.

  • 오랜 시간이 걸리지 않는 코드를 뽑아내시오.

  • 문제 풀이 방법 : 작성한 코드를 제시하고, 이 코드에 따라 나온 다른 배열 5개를 입력한다.
five

2020/12/12 19:16

MrNick 이은총/ LanotaDefenceCrops

너무 꼬아서 줬네요. 힌트는 %입니다. - MrNick 이은총/ LanotaDefenceCrops, 2020/12/16 17:38
문제 의도 찾기 예상 레벨 : Lv.5 - MrNick 이은총/ LanotaDefenceCrops, 2020/12/22 23:00

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 

2021/01/14 11:19

히구

+1 아 ㅋㅋㅋ 생각해보니 파이썬에게는 껌인 문제네요 ㅠㅠㅠ - MrNick 이은총/ LanotaDefenceCrops, 2021/03/23 20:17
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회 추출 및 배열




2021/05/12 07:36

Jay Sim

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

2020/12/15 16:14

안녕

맞지만 문제 의도랑은 다른 방법이네요! - MrNick 이은총/ LanotaDefenceCrops, 2020/12/15 19:57

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;
            }
        }
    }
}

2020/12/16 11:41

mohenjo

+1 이 방법도 흥미롭군요. 문제 힌트는 5 위에 있는 %였습니다! - MrNick 이은총/ LanotaDefenceCrops, 2020/12/16 17:40

파이썬 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 = ""

2020/12/17 12:49

코딩초딩

+1 맞습니다. 저도 소거법 비슷하게 코딩했어요. 하지만 '속도 이슈를 해결하는 방법 찾기'가 문제의 의도랍니다! 이 부분이 달라요! - MrNick 이은총/ LanotaDefenceCrops, 2020/12/17 16:50

이렇게 하는건 맞을까요? 초보라 질문해봅니다.


def rand():
    import random
    n = 0
    a = list(range(1,10))
    b = random.sample(a,9)
    return b


for i in range (6):
    print(rand())

2020/12/18 17:36

조성환

네 기본은 맞습니다 - MrNick 이은총/ LanotaDefenceCrops, 2020/12/19 19:41

파이썬 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)])

2020/12/19 19:35

코딩초딩

+1 파이썬이시면 윗분처럼 random.sample을 활용하사면 되겠습니다 - MrNick 이은총/ LanotaDefenceCrops, 2020/12/19 19:41
앗 감사합니다!! 모듈 까지는 아직 배우질 않았는데 찾아봐야 겠어요!! - 코딩초딩, 2020/12/19 20:24

잘 한건지 모르겠네요 ^^; 결과는 원하는데로 나온것 같기는 헌디...

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)

2020/12/22 20:56

조영환

윗분과 비슷한 방법을 선택한것 같습니다. 문제 의도는 %입니다! - MrNick 이은총/ LanotaDefenceCrops, 2020/12/22 21:06

흠흠....

import random

number = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for _ in range(5):
    random.shuffle(number)
    print(number)

2020/12/22 22:57

조영환

뷁 문제 의도 찾기 상당히 어려운가 보군요 - MrNick 이은총/ LanotaDefenceCrops, 2020/12/22 22:58
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] 문제의도같은건 모르겠네요

2020/12/25 23:59

손승원

사실 문제를 10보다 많은 값으로 해서 내려고 했으나 까먹었네요 문제 의도가 어려운게 문제 - MrNick 이은총/ LanotaDefenceCrops, 2021/01/03 23:33

```{.python}

```from random import * number = [1,2,3,4,5,6,7,8,9] shuffle(number) print(number)

문제의도는 잘 모르겠네요.. 초보라서.. 이렇게라도 올려봐여

2021/01/03 20:18

goodtreeksw

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개입니다.

2021/01/11 20:18

Hyungseok

코드는 다음과 같습니다.

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]

2021/01/12 15:43

이준우

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('일 줄 알았는데 문제의도와는 정반대에 있었다')

ㅜㅜㅜㅜ

2021/01/15 18:05

빅도와 루돌프의 일상

#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]

2021/01/16 23:07

June

문제 의도 힌트

123456789 -> 12345789 -> 1345789 -> ...

2021/01/16 23:33

MrNick 이은총/ LanotaDefenceCrops

힌트도 좋지만 이제 출제자의 답을 알려주실때도 된것 같네요 ^^ - pahkey, 2021/01/17 10:32
알겠습니다. 오늘 저녁쯤에 공개하죠! - MrNick 이은총/ LanotaDefenceCrops, 2021/01/17 11:39

정답 (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]);
    }

}

2021/01/19 15:05

MrNick 이은총/ LanotaDefenceCrops

#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],

2021/03/23 19:00

cjmoon

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)

2021/03/23 19:53

Sol Choi


from random import *

a = list(range(1, 10))

for i in range(5):
      shuffle(a)
      print(a)

2021/03/27 19:22

peter

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)

2021/03/28 22:11

돈 벌면 뭐하노

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()

2021/04/13 18:13

fox.j

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

2021/04/14 17:09

이동훈

노가다도 괜찮죠? ㅎㅎ - 이동훈, 2021/04/14 17:11
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)

2021/04/25 06:16

농창

#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

2021/05/01 07:41

test1234

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

2021/07/08 17:10

이원희

중복인 거 찾기 귀찮아서 ㅎㅎ - 이원희, 2021/07/08 17:12

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);
}

자바언어 초보자입니다! 정답맞나용??

2021/07/29 19:09

김준태

for i in range(5):
    a=list(range(1,10))
    b=random.sample(a,9)
    print(b)

2022/03/23 07:44

kim ih

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)

2022/04/02 12:16

김상봉

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문 사용하여 마무리 했습니다.

2022/08/05 23:06

정영훈

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

2022/12/06 04:41

Buckshot

[6, 5, 2, 8, 1, 4, 3, 7, 9] [1, 7, 5, 4, 8, 2, 9, 6, 3] [5, 1, 2, 6, 8, 4, 7, 9, 3] [1, 4, 9, 2, 5, 3, 6, 7, 8] [9, 8, 4, 2, 5, 3, 6, 7, 1] 결과는 맞게 나오나, 이렇게 푸는걸 원하신게 아닐거라고 생가되네요 ㅜ - Buckshot, 2022/12/06 04:42
import datetime
import time

now = datetime.datetime.now()
for _ in range(5):
    nums = []
    while len(nums) < 9:
        now = datetime.datetime.now()
        t = now.microsecond % 10
        if t != 0 and t not in nums:
            nums.append(t)
        time.sleep(0.01)
    print(nums)

2023/07/14 19:37

insperChoi

목록으로