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

타노스의 핑거 스냅

타노스는 프로그램의 균형을 위해서는 리스트의 원소 절반을 무작위로 삭제해야 한다고 믿고 있다.

타노스가 손가락을 튕겼을 때(프로그램을 실행했을 때) 입력된 리스트에서 절반의 원소를 무작위로 삭제하여 리턴하는 인피니티 건틀렛 프로그램을 작성하시오.

(무작위 삭제이므로 입력값이 같아도 출력값이 매번 달라야 합니다)

입력 예시

[2, 3, 1, 6, 5, 7]

출력 예시 1

[2, 5, 7]

출력 예시 2

[3, 6, 5]

참고: 리스트의 원소가 홀수개일 경우 절반의 확률로 절반보다 많은 원소가 삭제되거나 절반보다 적은 원소가 삭제되어야 합니다.

(만약 리스트의 원소가 7개라면 절반의 확률로 3개 또는 4개의 원소가 삭제됨)

2018/05/11 22:07

myyh2357

컨셉에 박수 드립니다. - Hyuk, 2018/05/12 23:59
매우 창의적이네요. - 김영성, 2020/01/25 12:05
문제덕에 재밌게풀었습니다! ㅎㅎ - 아스칼론, 2018/05/14 20:10
관련e북도만드셨네요 ㄷㄷ - leak, 2018/07/02 15:29

98개의 풀이가 있습니다.

파이썬입니다. 리스트를 섞고 앞에서부터 절반만 출력했습니다.

(길이가 홀수면 난수와 0.5를 비교해서 1/2확률로 출력할 길이 + 1)

import random as rd
def delete_half(x):
    rd.shuffle(x)
    t = len(x)//2
    if len(x) % 2 and rd.random() < 0.5: t += 1
    return x[:t]

결과

print(delete_half([3, 2, 6, 4, 5, 7, 1]))


[4, 7, 1]
[2, 7, 3, 5]
[6, 5, 3, 2]
[5, 2, 3]

2018/05/12 22:22

Hyuk

shuffle 이용 Good!요~ 0 또는 1 나오는 부분은 random.randint(0,1)로 하시면 깔끔할 듯... - WJ K, 2018/07/11 04:05
선생님 좋은 답변 보고 잘 배웠습니다~! 질문있어요 if len(x) % 2 and rd.random() < 0.5: t += 1 에서 len(x) % 2 부분은 왜 있는 거에요? 없어도 상관 없는거죠? 코린이라 제가 모르는 뭔가가 있나해서요. 없애도 그대로 나오길래.. 혹시 답변해주시면 감사드리겠습니다~! - kh ahn, 2022/03/21 21:57

Ruby

take = ->size { size/2 + (size.odd? ? rand(2) : 0) }
snap = ->arr { arr.shuffle[0...take[arr.size]] }

Test

# cases : empty, odd, even
expect( snap.call([]) ).to eq []
expect( snap.call([1]) ).to eq([]) or eq([1])
expect( snap.call([1, 2, 3]).size ).to eq(1) or eq(2)
expect( snap.call([1, 2, 3, 4, 5, 6]).size ).to eq(2) 

2018/05/12 10:24

rk

자바입니다
public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str = br.readLine().split(" ");
        int num = str.length;

        List<Integer> nums = new ArrayList<>();
        for (int i=0; i<num; i++) {
            nums.add(Integer.parseInt(str[i]));
        }

        if (num % 2 == 0) { // 짝일 때
            int j = num;
            for (int i=0; i<num/2; i++) {
                nums.remove((int)(Math.random()*j));
                j--;
            }
            System.out.println(nums);
        } else { // 홀일 때
            int stand = (int)(Math.random()*2); // 0 or 1
            stand = stand == 0 ? num/2 : num/2+1;
            int j = num;
            for (int i=0; i<stand; i++) {
                nums.remove((int)(Math.random()*j));
                j--;
            }
            System.out.println(nums);
        }
    }

2018/05/12 16:45

정몽준

import random

List = [1, 2, 3]
ite = 0
if len(List)//2 == len(List)/2: ite = len(List)/2
else: ite = len(List)//2 + random.randint(0, 1)
for a in range(int(ite)):
    List.pop(random.randint(0, len(List)-1))
print(List)

2018/05/12 20:08

황민

import random

input=[2, 3, 1, 6, 5, 7]

if len(input) % 2 != 0:
    length = int(len(input)/2)+random.choice([0,1])
for i in range(length):
    item=random.choice(input)
    input.remove(item)
print (input)

2018/05/12 22:15

superarchi

import random as R

def Fingersnap(lis):
       num = R.randint(0,1)
       if len(lis) % 2 == 0 and num == 1: num -= 1
       for x in range(0,int(len(lis)/2)+num):
              x = R.randrange(len(lis))
              del lis[x]
       print(lis)

2018/05/13 18:43

김영성

import scala.util.Random

class ScalaQ1(inputList: List[Int]) {
    val listSize = inputList.length
    val isOdd = listSize % 2 != 0

class ScalaQ1(inputList: List[Int]) {
    val listSize = inputList.length
    val isOdd = listSize % 2 != 0

    def takeHalf: List[Int] = {
        val halfSize = listSize / 2
        val removeCountList = if (isOdd) List(halfSize, halfSize + 1) else List(halfSize)
        val chooseCount = Random.shuffle(removeCountList).head
        Random.shuffle(inputList).take(chooseCount)
    }

}

2018/05/14 09:47

김진교

import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author Kimseongsu
 * @see http://codingdojang.com/scode/592
 *
 */
public class P592 {

    public static void main(String[] args) {
        final String INPUT = "2, 3, 1, 6, 5, 7";

        List<Integer> list = Stream.of(INPUT.split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList());
        Collections.shuffle(list);

        final int halfSize = (list.size() / 2) + (list.size() % 2 == 1 && new Random().nextBoolean()? 1 : 0);
        final List<Integer> halfList = list.subList(0, halfSize);

        System.out.println(String.join(", ", halfList.stream().map(String::valueOf).collect(Collectors.toList())));
    }
}

2018/05/14 11:59

Seongsu Kim

// ConsoleApplication3.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다.
//

//타노스는 프로그램의 균형을 위해서는 리스트의 원소 절반을 무작위로 삭제해야 한다고 믿고 있다.
//타노스가 손가락을 튕겼을 때(프로그램을 실행했을 때) 입력된 리스트에서 절반의 원소를 무작위로 삭제하여 리턴하는 인피니티 건틀렛 프로그램을 작성하시오.
//(무작위 삭제이므로 입력값이 같아도 출력값이 매번 달라야 합니다)


#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <ctime>

#define died 0

int Avengers[7] = {2, 3, 1, 6, 5, 7, 4};

int Finger_snap(int at, int end)
{
    int a;

    srand(time(NULL));

    a = at+rand() % end;

    return a;
}

int main()
{
    int cnt = 0;
    int Tanos;

    for (int i = 0; i < 7; i++) if (Avengers[i] != died) cnt++;

    if (cnt == 6)
    {
        for (int i = 0; i < 3; i++)
        {
            Tanos = Finger_snap(0, 6);

            if (Avengers[Tanos] != died) { Avengers[Tanos] = died; }
            else { i--; continue; }
        }
    }
    else if (cnt == 7)
    {
        for (int i = 0; i < Finger_snap(3, 4); i++)
        {
            Tanos = Finger_snap(0, 7);

            if (Avengers[Tanos] != died) { Avengers[Tanos] = died; }
            else { i--; continue; }
        }
    }

    for (int i = 0; i < cnt; i++) std::cout << Avengers[i] << " ";//전체 히어로 출력
    //for (int i = 0; i < cnt; i++) if (Avengers[i] != died) std::cout << Avengers[i] << " ";//살아남은히어로만출력
    return 0;
}

즐겁게 풀었던 문제네요 ㅋㅋㅋ 어벤져스의 패배입니다 흑흑

2018/05/14 19:51

아스칼론

Swift입니다.

배열의 항목 개수가 짝수인지 홀수인지에 따라서 삭제할 항목 수를 결정하고, While loop에서 랜덤하게 아이템을 삭제했습니다.

import Foundation

func getHalf(_ numbers: [Int]) -> [Int] {
    var nums = numbers
    let count = nums.count
    let deleteCount = (count % 2 != 0 && arc4random_uniform(2) == 1) ? (count / 2 + 1) : (count / 2)

    while nums.count > deleteCount {
        nums.remove(at: Int(arc4random_uniform(UInt32(nums.count))) )
    }
    return nums
}

for _ in 1...10 {
    print( getHalf( [1,2,3,4,5,6,7]) )
}

결과는...

[2, 3, 4, 7]
[3, 4, 5, 6]
[1, 2, 7]
[1, 2, 3, 7]
[4, 5, 7]
[2, 3, 7]
[1, 2, 4, 5]
[1, 5, 7]
[1, 3, 7]
[1, 2, 5]

2018/05/15 02:41

졸린하마

i1 = input() # list
i2 = []

for k in i1:
    if k.isdigit():
        i2.append(int(k))


import random


def Tanos(lst):
    lst_copy = lst.copy()
    a = len(lst) - 1

    if len(lst) % 2 == 0:
        while True:
            randint = random.randint(0,a)
            num = lst_copy[randint]
            lst_copy.remove(num)
            a = a - 1
            if len(lst_copy) == int(len(lst) / 2):
                break

    elif len(lst) % 2 == 1:
        c = random.randint(0,1)
        if c == 0: # 적은 수
            while True:
                randint = random.randint(0,a)
                num = lst_copy[randint]
                lst_copy.remove(num)
                a = a - 1
                if len(lst_copy) == int(len(lst) / 2) + 1:
                    break
        else:
            while True:
                randint = random.randint(0,a)
                num = lst_copy[randint]
                lst_copy.remove(num)
                a = a - 1
                if len(lst_copy) == int(len(lst) / 2) :
                    break

    return lst_copy


print(Tanos(i2))

2018/05/15 20:24

최우성

초보라 풀이가 길어졌네요..ㅠㅠ - 최우성, 2018/05/15 20:25
import java.util.Scanner;

public class tha{
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);

  String input = sc.nextLine();
  String [] arr = input.split(" ");

  java.util.Random ran1 = new java.util.Random();
  int a;
  if(ran1.nextInt(2) == 1)
   a = (int)Math.ceil(arr.length/2.0);
  else
   a = (int)Math.floor(arr.length/2.0);
  int j = 0;
  while(j != a){
   int b = ran1.nextInt(arr.length);
   if(arr[b] != ""){
    arr[b] = "";
    j++;
   }
  }

  for(int i=0;i<arr.length;i++){
   if(arr[i].equals("") == false)
    System.out.print(arr[i] + " ");
  }
 }
}

2018/05/15 20:59

배혜민

#include<iostream>
#include"stdafx.h"

void guntlet(list<int> &my_list,int max_size)
{
    srand((unsigned int)time(0));
    int erase_num = 0, judge_num;
    list<int>::iterator iter = my_list.begin();
    while (erase_num < max_size)
    {
        judge_num = rand() % 999;
        if (judge_num % 2 == 0)
            my_list.erase(iter), erase_num++, iter = my_list.begin();
        iter++;
        if (iter == my_list.end())
            iter = my_list.begin();
    }
}
int main()
{
    srand((unsigned int)time(0));
    list<int> lt1;
    int random_num;
    for (int i = 0; i < 7; i++)
        lt1.push_back(i * 3);
    if (lt1.size() % 2 == 0)
        guntlet(lt1, int(lt1.size() / 2));
    else
    {
        random_num= rand() % 999;
        if (random_num % 2 == 0)
            guntlet(lt1, int((lt1.size() / 2) + 1));
        else 
            guntlet(lt1, int((lt1.size() / 2)));
    }
    for (list<int>::iterator iter = lt1.begin(); iter != lt1.end(); iter++)
        cout << *iter << " ";
    cout << endl;
}

2018/05/17 22:26

Hujinsu

#include<iostream>
#include<vector>
#include<ctime>
#include<stdlib.h>

using namespace std;

void EndGame(vector<int> v)
{
    int n;

    for (int i = 0; i < 7; i++)
    {
        cin >> n;
        v.push_back(n);
    }
    srand((unsigned)time(0));
    for (int i = 0; i < (int)v.size() + 1 / 2; i++)
    {
        int num = rand() % v.size();
        v.erase(v.begin() + num);
    }
    for (int i = 0; i < (int)v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl;
}

int main()
{
    vector<int> v;
    EndGame(v);
}

2018/05/20 16:11

Jun ki Kim

자바스크립트로 했습니다. 입력된 배열의 길이 반만큼 (홀수의 경우 50% 만족) 인덱스를 무작위로 추출해 원소를 삭제했습니다.


const LIST = [34,2,67,5,44,34,59,9,6,13,46];
function fingerSnap(list){
  var prob = Math.floor(Math.random()*2);
  var num = Math.floor((list.length+prob)/2);
  for(var i = 0; i < num; i++){
    list.splice(Math.floor(Math.random()*list.length)-i,1);
  }
  return list
}
console.log(fingerSnap(LIST));

결과 [ 34, 59, 9, 6, 13 ] [ 2, 5, 44, 34, 9, 13 ] [ 67, 5, 44, 34, 6 ] [ 34, 2, 44, 34, 59, 46 ] [ 5, 44, 9, 6, 13 ] [ 2, 5, 44, 9, 13 ] [ 34, 67, 5, 9, 6, 46 ] [ 2, 5, 44, 13, 46 ] . . .

2018/05/21 18:52

이항복

import random

def thanos(list1):
   if len(list1) % 2 == 0:
       for i in range(0, int(len(list1)/2)):
           list1.remove(random.choice(list1))
   else:
       for i in range(0, int(len(list1)/2 + random.random())):
           list1.remove(random.choice(list1))
   print (list1)


thanos([1,2,3,5,6])

2018/05/22 22:30

김정현

import random
import math

def infinite_gun(list1):
    for i in range(random.randint(len(list1)//2,math.ceil(len(list1)/2))):
        list1.pop(random.randint(0,len(list1)-1))
    return list1

print(infinite_gun([1,2,3,4,5,6,7]))

2018/05/23 10:18

재즐보프

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int* a, int*b)
{
    if (a == b)
    {
        swap(*a + 1, *b);
        return;
    }
    int temp = *a; *a = *b; *b = temp;
}
int main()
{
    int human[] = { 2,3,1,6,5,7,8 };
    int size = sizeof(human) / sizeof(int);
    int i,size_half;
    int* half = (int*)malloc(sizeof(human)/2);
    srand((unsigned)time(NULL));

    for (i = 0; i < size/2; i++)
    {
        int tmp,temp;
        tmp = (rand() % (size-i));
        half[i] = human[tmp];
        swap(&human[size - 1], &human[tmp]);

    }

    size_half = size / 2;
    printf("[");
    for (i = 0; i < size_half; i++)
    {
        printf("%d", half[i]);
        if (i < size_half-1)
        {
            printf(", ");
        }
    }
    printf("]\n");
    free(half);
    return 0;

} 

2018/05/23 19:40

전민재

c언어 입니다 - 전민재, 2018/05/23 19:40

def THANOS(): population=set(list(range(1,300)))

if len(population)%2==0:
    slaughtered=set(rd.sample(range(1,len(population)+1),int(len(population)/2)))
    result=population-slaughtered

else:
    temp_random=rd.randint(1,2)
    if temp_random==1: #절반보다 적은 원소 삭제
        slaughtered=set(rd.sample(range(1,len(population)+1),int((len(population)-1)/2)))
        result=population-slaughtered

    else: #절반보다 많은 원소 삭제
        slaughtered=set(rd.sample(range(1, len(population)+1),int((len(population)+1)/2)))
        result=population-slaughtered

print('Only',result,'were saved by Thanos')
print(len(result),'were saved.')

2018/05/24 11:41

서승연

import random
import math

def remove(remove_num, target):
    return random.sample(target, remove_num)

def main():
    input = [2, 3, 1, 6, 5, 7, 9]
    size = len(input)
    if size % 2 == 0:
        half_size = int(size / 2)
        print(remove(half_size, input))

    else:
        Life_or_death = random.randrange(0, 2)
        if Life_or_death == 1:
            half_size = math.ceil(size / 2)
            print(remove(half_size, input))
        else:
            half_size = math.floor(size / 2)
            print(remove(half_size, input))

if __name__ == '__main__':
    main()

2018/05/25 16:06

윤병호

파이썬에서 random.sample 함수를 사용했습니다.

import random

while True:
    lis = [int(x) for x in input("리스트 입력: ")[1:-1].split(", ")]
    num = int((lambda x:x/2 if x%2 == 0 else x/2 if random.random()>0.5 else x/2+1)(len(lis)))
    print(random.sample(lis, num))

2018/05/28 14:57

Gene Byun

Python

import random
t = 0
cnt_3 = 0
cnt_4 = 0
while t < 100:
    a = [2, 3, 1, 6, 5, 7, 8]
    ans = []
    n = len(a)
    while round(n/2) != len(a):
        ans.append(a.pop(random.randint(0, len(a)-1)))
    if n%2 == 1 and random.random() > 0.5:
        ans.append(a.pop(random.randint(0, len(a)-1)))
    t += 1
    if len(ans) == 3:
        cnt_3 += 1
    else:
        cnt_4 += 1
print("Ratio = {}".format(cnt_3/cnt_4))

2018/06/18 16:30

Taesoo Kim

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <vector>

using namespace std;

int main()
{
    srand(time(NULL));

    vector<int> nums;

    nums.push_back(2);
    nums.push_back(3);
    nums.push_back(1);
    nums.push_back(6);
    nums.push_back(5);
    nums.push_back(7);


    for (int i = 0; i < nums.size(); i++)
    {
        cout << nums[i] << " ";
    }

    for (int i = 0; i < ((nums.size() / 2) + rand() % 2); i++)
    {
        nums.erase(nums.begin() + (rand() % nums.size()));
    }
    cout << endl;

    for (int i = 0; i < nums.size(); i++)
    {
        cout << nums[i] << " ";
    }

    return 0;
}

2018/06/25 17:29

서영균

from random import *

n = [int(x) for x in input().split()]
print( sample(n,len(n)//2+1 if len(n)%2 and randint(0,1) else len(n)//2) )



4 5 6 7 8
[7, 6]
[5, 8, 7]
[5, 4]
[7, 8]
[6, 5]
[7, 8, 5]
[5, 7]
[5, 7, 8]
[5, 4, 6]
[8, 4, 7]

2018/06/27 16:33

Creator

import random

list = [2,3,1,9,5,9,5]
new_list = []

odd_number_task = 0

if len(list)%2 == 1:
    odd_number_task = random.choice([0,1])

length_of_new_list = int(len(list)/2)+odd_number_task

while len(new_list) < length_of_new_list:
    temp = random.choice(list)
    for i in range(len(new_list)):
        if temp == new_list[i]:
            break
    else:
        new_list.append(temp)

print(new_list)

2018/07/06 14:03

서완길 (선인장물주기)

l=list(map(int,input().split()))
n=len(l)


#list 원소의 개수가 홀수이면
#절반의 확률로 n/2 or n/2+1 만큼 제거
import random

if n%2==0:

    for i in range(int(n/2)):
        random.shuffle(l)
        l.pop()

elif n%2==1:

    for i in range(int(n/2)+random.randint(0,1)):
        random.shuffle(l)
        l.pop()

print(l)

2018/07/07 16:45

박산희

import random

lst = [2, 3, 1, 6, 5, 7]
half = len(lst) // 2 + (len(lst) % 2) * random.choice([0, 1])
for i in range(half):
    del lst[ random.randrange(len(lst)) ]
print(lst)

컨셉만 생각하면 관계없겠는데, 리스트는 순서가 있으니 문제에 충실한다면 shuffle은 반칙인 거 같습니다.

2018/07/17 23:09

Noname

C#

using System;
using System.Collections.Generic;

namespace CD168
{
    class Program
    {
        static void Main()
        {
            List<int> alist = new List<int>() { 2, 3, 1, 6, 5, 7 };
            Console.WriteLine(String.Join(",", FlipFingers(alist)));
        }

        static Random rnd = new Random();

        static List<T> FlipFingers<T>(List<T> aList) 
        {
            // Shuffle Generic List
            List<T> sourceList = new List<T>(aList);
            List<T> newList = new List<T>();
            while (sourceList.Count > 0)
            {
                int idx = rnd.Next(0, sourceList.Count);
                newList.Add(sourceList[idx]); sourceList.RemoveAt(idx);
            }
            // flip fingers
            int len = newList.Count;
            int halfIdx = len % 2 == 0 ? len / 2 : len / 2 + rnd.Next(0, 2);
            return newList.GetRange(0, halfIdx);
        }
    }
}

2018/09/12 16:02

mohenjo

from random import*
t=[12,34,56,78,90,1]
a=random()
repeat=len(t)/2
if repeat != round(repeat) and a>0.5:
    repeat-=1
while repeat>0:
    repeat-=1
    t.pop(randint(0,len(t)-1))

print(t)


2018/10/27 19:17

Luzz

thanos <- function(x){
  len_x <- length(x)
  len_del <- len_x / 2
  if (len_x %% 2 == 1){
    if (rnorm(1) < 0){
      len_del <- len_del - 0.5
    } else if (rnorm(1) > 0){
      len_del <- len_del + 0.5
    }
  } else {

  }
  x <- x[-c(sample(len_x, size = len_del))]
  return(x) 
}

2018/11/12 16:15

physche

import random

lists = [2,3,1,6,5,7]
Delete=[]
k=len(lists)

#원소수가 짝수일 경우.
if k%2==0:
    k=k//2
#원소수가 홀수일 경우.
elif k%2!=0:
    k=(k//2)+random.randint(0,1)
for i in range(k):
    f=random.choice(lists)
    Delete.append(f)
    lists.remove(f)

print('사라질 원소:',Delete,'\n 생존한 원소',lists)

2018/12/21 20:18

S.H

from random import *

def Tanos(list):
    res=[]
    count=0
    half = len(list)//2
    if len(list)%2==1: half = randint(half,half+1)
    while count<half:
        i = randint(0,len(list)-1)
        if list[i] not in res:
            res.append(list[i])
            count+=1
    return res

print(Tanos([2,3,1,6,5,7,4]))

2019/01/22 21:37

얀차

import random

x = list(map(int, input().split()))

def Tanos(x): random.shuffle(x) if len(x) % 2 != 0: if random.random() > 0.5: return x[:(len(x) // 2 + 1)] else: return x[:(len(x) // 2)] return x[:len(x) // 2]

print(Tanos(x))

2019/02/18 15:28

D.H.

import random
input_list = [2,3,1,6,5,7]

for i in range(len(input_list)//2):
    del input_list[random.randint(0,len(input_list)-1)]

print(input_list)

2019/02/18 15:34

import random
total = [2, 3, 1, 6, 5, 7, 8]
forHalf = random.randint(0, 1)
modRange = int(len(total) / 2)
if len(total) % 2 != 0 :
    modRange += forHalf
for i in range(modRange) :
    gone = random.randint(0, len(total) - 1)
    total.pop(gone)
print(total)

2019/02/21 23:33

좋은나쎔

import random
q = int(input('몇번 반복?'))
w = []
for i in range(q):
    num = int(input('숫자입력'))
    w.append(num)
if len(w) % 2 != 0:
    a = [random.sample(w, (len(w) - 1) // 2), random.sample(w, (len(w) + 1) // 2)]
    print(random.choice(a))
else:
    print(random.sample(w, len(w) // 2))

2019/02/26 16:41

끽끼끽끼

import random
while True:
    numlist=eval(input("Input list: "))
    k=len(numlist)
    random.shuffle(numlist)
    if k%2==0:
        result=numlist[:(k//2)]
    else:
        oddset=[-1,1]
        a=random.choice(oddset)
        result=numlist[:(k+a)//2]
    result.sort()
    print(result)

2019/03/04 17:57

ykleeac

c입니다 살짝 코드망함

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int a[100],b,c, cnt = 0,i = 0;
    printf("숫자를 입력하세요(-2입력시 종료)>>");
    for (i = 0; i <= 100; i++) {
        scanf("%d", &a[i]);
        if (a[i] == -2) {
            break;
        }
    }
    cnt = i;
    srand((unsigned)time(NULL));
    if (cnt % 2 == 0) {
        for (int j = 0; j <= (cnt / 2) - 1; j++) {
            b = rand() % (cnt / 2)+1 ;
            printf("%d", a[b]);
        }
    }
    else {
        c = (rand() % 2) + 1;
        if (c == 1) {
            for (int j = 0; j <= (cnt / 2) - 1; j++) {
                b = rand() % (cnt / 2) + 1;
                printf("%d", a[b]);
            }
        }
        else {
            for (int j = 0; j <= (cnt / 2); j++) {
                b = rand() % (cnt / 2) + 1;
                printf("%d", a[b]);
            }
        }


    }
}

2019/03/29 21:55

용 빈


import random
import math


list_in = input('숫자를 입력하세요:').split(',')
list_in = [int (i) for i in list_in]

if len(list_in) % 2 == 0:
    for i in range(len(list_in)//2):
        a = random.randint(0, len(list_in)-1)
        del list_in[a]

else:
    b = random.randint(1,2)
    if b == 1:
        for i in range(math.floor(len(list_in)/2)):
            a = random.randint(0, len(list_in) - 1)
            del list_in[a]
    else:
        for i in range(math.ceil(len(list_in)/2)):
            a = random.randint(0, len(list_in) - 1)
            del list_in[a]

print(list_in)


2019/03/30 10:13

김성근

namespace codingdojang__
{
    class Program
    {
        static void Main(string[] args)
        {
            Thanos(new List<string> { "2", "3", "1", "6", "5", "7", "4" });
        }

        static void Thanos(List<string> input)
        {
            Random random = new Random();
            int count = input.Count;
            if (count % 2 == 0)
            {
                for (int i = 0; i < count / 2; i++)
                {
                    input.RemoveAt(random.Next(0, input.Count));
                }
            }
            else if (count % 2 == 1)
            {
                int temp = random.Next(1, 3);
                if (temp % 2 == 0)
                {
                    for (int i = 0; i < count / 2; i++)
                    {
                        input.RemoveAt(random.Next(0, input.Count));
                    }

                }
                else if (temp % 2 != 0)
                {
                    for (int i = 0; i < (count / 2) + 1; i++)
                    {
                        input.RemoveAt(random.Next(0, input.Count));
                    }

                }
            }
            foreach (var i in input)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
        }
    }
}

2019/03/30 23:20

bat

실제 삭제하는 부분의 코드는 총 3줄입니다.
참고하시기 바랍니다.

'''
# Logic
0. 리스트 입력 받기
1. 삭제할 개수 구하기 (리스트 길이의 1/2)
1.1 홀수 개일 경우 50% 확률로 절반 초과/미만 결정
2. 개수 만큼의 무작위 인덱스 계산
3. 2번에서 계산된 인덱스를 제외하여 결과집합 생성
'''

import numpy as np

# 0. 리스트 입력받기
lst = list()
while True:
    num = input("숫자를 입력해주세요. ('exit' 입력시 종료) : ")
    if num.lower()=='exit':
        break
    else:
        try:
            lst.append(int(num))
            continue
        except ValueError:
            print("숫자를 입력해주세요.")
            continue

# 1. 삭제할 개수
del_num = np.floor(len(lst)/2) if np.random.randint(0,2,1,int)[0]==0 else np.ceil(len(lst)/2) if len(lst)%2==1 else len(lst)/2

# 2. 삭제할 인덱스
del_idx = list(np.random.choice(range(len(lst)), size=int(del_num), replace=False))

# 3. 결과 집합
result = [lst[i] for i in [i for i in list(range(len(lst))) if i not in del_idx]]

2019/04/03 13:58

Clifford Lindsher

import random
def removeHalf(L):
    m = len(L) // 2 + (len(L) % 2) * round(random.random())
    for i in range(m): L.pop(random.randrange(0, len(L)))
    print(L)
>>> removeHalf([2,3,1,6,5,7,3])
[2, 1, 3]
>>> removeHalf([2,3,1,6,5,7,3])
[3, 1, 6, 5]

2019/04/30 11:41

messi

파이썬 3.7.2

import random
nlist = [3, 4, 6, 8, 5 ,2]
random.shuffle(nlist)
cut = 0
if len(nlist) % 2 != 0:
    if random.random < 0.5:
        cut = len(nlist)/2+0.5
    else:
        cut = len(nlist)/2-0.5
else:
    cut = len(nlist)/2
print(nlist[0:int(cut)])

2019/05/15 18:40

CT_EK

import random
def thanos(a):
    result = []
    random.shuffle(a)
    count = (len(a)//2)
    if (len(a)) % 2 == 1:
        x = random.randrange(0,2)
        if x == 0:
            count +=1
    while count > 0:
        a.pop()
        count -=1

    print(a)

2019/05/17 18:00

조관우

파이썬3.7 사용. 처음엔 셔플을 한다음 앞쪽에서 절반을 지울까 생각했었는데 그러면 지우지 않은 요소들의 순서도 바뀌는게 별로 안좋은것 같아서 평범하게 짜봤습니다.

import random
inputlist=[2, 3, 1, 6, 5, 7, 9] #입력값
N=len(inputlist)

if N%2==0:
    middle_point=N//2
elif random.random() >= 0.5: #홀수개인 경우 1/2의 확률로 결정
    middle_point=N//2
else:
    middle_point=N//2+1

for i in range(middle_point):
    del inputlist[random.randrange(0,N-i)] #inputlist에서 원소가 줄어들때마다 인덱스 범위도 하나씩 줄어들어야함

print(inputlist)

2019/06/06 22:50

왕초보

from random import*

ans=list(map(int,input().split()))

if len(ans)%2==1:
    ei=randint(1,2)
    if ei==1: 
        ans=sample(ans,int((len(ans)-1)/2))
    else:
        ans=sample(ans,int((len(ans)+1)/2))
else:
    ans=sample(ans,int(len(ans)/2))

print(ans)

2019/06/09 14:29

암살자까마귀

import numpy as np
a= list(map(int, input().split(' ')))
l=len(a)
cir = int(np.trunc(l/2) + np.round(l%2)*np.round(np.random.rand()))
for i in range(cir):
    sel_idx = np.random.randint(l)
    l-=1
    del a[sel_idx]
print(a)

2019/08/17 22:06

최재학

import random

data = [2, 3, 1, 6, 5, 7] deldata = [] random.shuffle(data)

a = random.randint(0, 1) b = int((len(data)/2))

if len(data) % 2 != 0: if a == 0 : b = len(data)/2 + 0.5 else : b = len(data)/2 - 0.5

for i in range(int(b)): deldata.append(data[i])

for j in deldata: data.remove(j) deldata = [] print(data)

2019/09/21 17:21

김민규

import random
inp, za, result = eval(input("input : ")), [], []
if len(inp)%2 == 1 :
    if random.randint(1, 2) == 1:
        moku = int((len(inp)-1)/2)
    else :
        moku = int((len(inp)+1)/2)
else :
    moku = int(len(inp)/2)
while True :
    if len(za) == moku :
        break
    else :
        new = random.randint(0, len(inp)-1)
        if not new in za :
            za.append(new)
for zaza in za :
    result.append(inp[zaza])
print(result)

파이썬인데 너무 기네요 ㅠㅠㅠ 더 열심히 공부하겠습니다!

2019/09/30 13:19

GG

입력되는 값이 홀수인지 짝수인지 먼저 확인하고 그 다음에 랜덤으로 삭제했습니다.

public class 타노스의핑거스냅 {

    public static void main(String[] args) {

        Random random = new Random();
        Scanner scan = new Scanner(System.in);
        String a = scan.nextLine();
        String[] str = a.split(", ");
        ArrayList<String> list = new ArrayList<String>();
        for(int i=0; i<str.length; i++) {
            list.add(str[i]);
        }

        if(list.size()%2==1) {
            int count = random.nextInt(2)+(list.size()/2);
            int count2 = 0;
            for(int i=0;; i++) {
                if(count==count2) {
                    System.out.println(list);
                    break;
                }
                for(int j=0; j<list.size(); j++) {
                    int num = random.nextInt(2);
                    if(count==count2) {
                        break;
                    }
                    if(num==1) {
                        list.remove(j);
                        count2++;
                        continue;

                    }
                }
            }
        }
        else {
            int count3 = 0;
            int count4 = list.size()/2;
            for(int i=0;; i++) {
                if(count3 == count4) {
                    System.out.println(list);
                    break;
                }
                for(int j=0; j<list.size(); j++) {
                    int num2 = random.nextInt(2);
                    if(count3==count4) {
                        break;
                    }
                    if(num2==1) {
                        list.remove(j);
                        count3++;
                        continue;
                    }
                }
            }
        }
    }
}

2019/12/13 21:32

big Ko

파이썬3입니다. (닉퓨리: 어머니...)

import random

def thanos(x):
  x = random.sample(x,int((len(x)+random.randint(0,1))/2))
  return x

thanos(['캡틴', '토니', '토르'])    # 절반 확률로 1개 또는 2개 원소 삭제
thanos(['블랙위도우', '캡틴마블', '스파이더맨', '블랙팬서'])    # 2개 원소 삭제

2019/12/30 18:07

Sean

import random

lst1=[1,2,3,4,5,6]
lst2=[1,2,3,4,5,6,7]

def tfs(lst):
    for i in range(int((len(lst)+random.randint(0,1))/2)):
        lst.remove(random.choice(lst))
    return lst

print(tfs(lst1))
print(tfs(lst2))

2020/01/15 17:01

박시원

import random

num=list(input("무작위로 아무 숫자나 입력하여 리스트 생성").split())
for i in range(len(num)):
    num[i]=int(num[i])
if len(num)%2==0:
    randomindex=random.sample(range(0,len(num)-1),len(num)//2)
else:
    probability=random.randint(1,2)
    if probability==1:
        randomindex=random.sample(range(0,len(num)-1),len(num)//2+1)
    else:
        randomindex=random.sample(range(0,len(num)-1),len(num)//2)

for i in randomindex:
    del num[i]
print(num)

2020/01/16 17:53

박재욱

import random
import math

def snap(people):
    dice = [0,1]

    stand = len(people)
    if(stand%2 == 0): #even
        stand = stand/2
    elif(stand%2 ==1): #odd
        stand = math.floor((stand/2))+random.choice(dice)

    random.shuffle(people)
    cnt = 0

    while(cnt!=stand):
        del people[cnt]
        cnt += 1

    return people

people = [x for x in range(1,26)]

print(snap(people))
print(len(people))

2020/01/22 19:15

Jung Marco

import random
def half(x):
    random.shuffle(x)
    if len(x) % 2 == 0:
        t = len(x) // 2
        print(x[0:t])
    else:
        if random.randint(0,1) == 0:
            t = (len(x) + 1) // 2
            print(x[:t])
        else:
            t = (len(x) - 1)//2
            print(x[:t])


half([1,2,3,4,5])

2020/01/30 22:51

꺼비

파이선 3.8
import random
array = [2, 3, 1, 6, 5, 7]
array2 = [3, 4, 7, 2, 5, 2, 7]
def random_delete(a): # a는 list
    if len(a) % 2==0: # 개수가 짝수면
        for i in range(int(len(a)/2)):
            a.pop(random.randint(0,len(a)-1)) # random.randint(int a,int b) a부터 b까지(b포함) random한 수 출력
    else:
        for i in range(int(len(a)/2)+random.randint(0,1)):
            a.pop(random.randint(0,len(a)-1))
    return a

print(random_delete(array))
print(random_delete(array2))

2020/02/23 18:10

카레맛카레

import random
value = input("In put Number : ")
value = (value.split(" "))
value_list = []
for i in value :
    value_list.append(int(i))

lenth = 0
if len(value_list) % 2 == 0 :
    lenth = len(value_list)/2
else :
    lenth = len(value_list)//2

Run = True
while Run :
    if lenth >0  :
        lenth -= 1
        n = random.randint(0,len(value_list)-1)
        del value_list[n]
    else :
        Run = False

print(value_list)


2020/03/01 00:00

semipooh

# 입력받기가 귀찮아 랜덤으로 원소를 생성하였습니다
import random
num=[]

n=random.randint(1,10)
for i in range (0,n):
    num.append(random.randint(0,10))

print ('input = ', num)

if n%2==0:
    howmany=n//2
else:
    if random.randint(0,1)==0:
        howmany=n//2
    else:
        howmany=(n//2)+1

if howmany>0:
    for i in range (0,howmany):
        del(num[random.randint(0,len(num)-1)])

print ('output = ', num)

2020/03/20 03:01

Buckshot

import random

N = list(map(int,input().split()))
if len(N) % 2 != 0:
    m = random.randrange(1,2)
    if m == 1:
        for i in range(int(len(N)/2)):
            N.pop(random.randrange(1,len(N)))
    if m == 2:
        for i in range(int(len(N)/2)+1):
            N.pop(random.randrange(1,len(N)))
elif len(N) % 2 ==0:
    for i in range(int(len(N)/2)):
        N.pop(random.randrange(1,len(N)))

print(N)

2020/03/21 19:49

BlakeLee

#include <iostream>
#include <ctime>
#include <vector>
using namespace std;

/*
타노스는 프로그램의 균형을 위해서는 리스트의 원소 절반을 무작위로 삭제해야 한다고 믿고 있다.
타노스가 손가락을 튕겼을 때(프로그램을 실행했을 때) 
입력된 리스트에서 절반의 원소를 무작위로 삭제하여 리턴하는 인피니티 건틀렛 프로그램을 작성하시오.
(무작위 삭제이므로 입력값이 같아도 출력값이 매번 달라야 합니다)

입력 예시
[2, 3, 1, 6, 5, 7]

출력 예시 1
[2, 5, 7]

출력 예시 2
[3, 6, 5]

참고: 리스트의 원소가 홀수개일 경우 절반의 확률로 절반보다 많은 원소가 삭제되거나 절반보다 적은 원소가 삭제되어야 합니다.
(만약 리스트의 원소가 7개라면 절반의 확률로 3개 또는 4개의 원소가 삭제됨)
*/

void Func(int *arr, int size) {
    int idx;
    bool check;
    vector<int> v;
    int arr_[2];
    int s;

    cout << "타노스 전[";
    for (int i = 0; i < size; i++) {
        if (i == size - 1) { cout << arr[i] << " ]" << endl; }
        else { cout << arr[i] << " ,"; }
    }

    if (size % 2 == 0) {
        for (int i = 0; i < size / 2; i++) {
            while (1) {
                check = true;
                idx = rand() % size;
                for (vector<int>::iterator iter = v.begin(); iter != v.end(); iter++)
                    if (*iter == arr[idx]) { check = false; }

                if (check) { break; }
            }
            v.push_back(arr[idx]);
        }
    }

    else {
        arr_[0] = size / 2;
        arr_[1] = size / 2 + 1;
        s = rand() % 2;

        for (int i = 0; i < arr_[s]; i++) {
            while (1) {
                check = true;
                idx = rand() % size;
                for (vector<int>::iterator iter = v.begin(); iter != v.end(); iter++)
                    if (*iter == arr[idx]) { check = false; }

                if (check) { break; }
            }
            v.push_back(arr[idx]);
        }
    }
    cout << "---------------------------------" << endl;
    cout << "타노스 후 [";
    for (int i = 0; i < v.size(); i++) {
        if (i == v.size() - 1) { cout << v[i] << " ]" << endl; }
        else { cout << v[i] << " ,"; }
    }
    cout << endl;
}

int main() {
    srand((unsigned int)time(NULL));
    int arr[8] = { 1,2,3,4,5,6,7,8 };
    Func(arr, sizeof(arr) / sizeof(int));

    int arr2[7] = { 1,2,3,4,5,6,7 };
    Func(arr2, sizeof(arr2) / sizeof(int));
}

2020/04/04 12:29

++C

import random

def tanos(s):
    plus = random.randint(0, 1)
    half = (len(s) / 2)
    if len(s) % 2 == 0: #짝수라면
        while len(s) > half:
            num = random.randint(0, len(s)-1)
            s.pop(num)
        print(s)
    else: #홀수라면
        while len(s) > half + plus:
            num = random.randint(0, len(s)-1)
            s.pop(num)
        print(s)


tanos([2, 3, 1, 6, 5, 7, 10, 5, 9])

2020/04/21 23:31

ptjddn95

import random
a = [1, 2, 3, 4, 5, 6]
for i in range(int(len(a)/2)):
    del a[random.randint(0, len(a)-1)]
print(a)

초보여서 아는 정도로만 간단하게 해봤어오

2020/05/01 10:02

Shiroha

def thanos(x):
    import random
    random.shuffle(x)
    x=x[:round(len(x)/2)]
    return x

2020/05/10 20:28

Dongsuk Kim

import random

def finger_snap(l):
    remove_count = len(l) // 2 + (round(random.random()) if len(l) % 2 != 0 else 0)
    for i in range(remove_count):
        del l[random.randint(0, len(l) - 1)]
    return l

2020/05/11 01:40

김준혁

import random
import math

def tanos(t):
    if len(t)%2 == 0:
        return snap(r=int(len(t)/2))
    else:
        s = random.randint(1, 2)
        return snap(r= int(math.ceil(len(t)/2) if s == 1 else math.floor(len(t)/2)))

def snap(r):
    for i in range(r):
        p = random.randint(0, len(t)-1)
        del t[p]
    return t

if __name__ == '__main__':
    t = [2, 3, 1, 6, 5, 7, 9]
    print(tanos(t))

2020/05/12 16:00

Hwaseong Nam

import random
import math

a = list(input().split(','))
sampleList = random.sample(a, math.ceil(len(a)/2))
samplelist = random.sample(a, math.floor(len(a)/2))
sample = [sampleList,samplelist]
print(sample)
if len(a)%2 == 1:
    print(random.choices(sample, weights=[1,1]))
else:
    print(sampleList)

2020/05/20 23:32

Money_Coding

파이썬3입니다.

import random as r

sList = [2,3,1,6,5,7,9]

snapNumber = len(sList)//2 
if len(sList) % 2 == 1 :
    snapNumber += r.randrange(2)

print(r.sample(sList, snapNumber))

2020/06/30 08:54

누마루

import random

def random_list(array):
    n=len(array)
    r_list=[]
    index_list=[]
    v_list=[]
    cnt=int(n/2)
    if n%2:cnt=random.randint(cnt,cnt+1)

    while cnt>0:
        index=random.randint(0,n-1)
        if index not in index_list:
            r_list.append((index,array[index]))
            index_list.append(index)
            cnt-=1

    r_list.sort()
    for i in range(len(r_list)):
        v_list.append(r_list[i][1])

    return v_list

if __name__ == "__main__":
    print(random_list([2, 3, 1, 6, 5, 7, 4]))

2020/07/21 09:40

배기경

import java.util.ArrayList;
import java.util.Random;

public class test7 {
    public static void main(String[] args) {
        int[] human = {2,3,1,6,5,7};

        ArrayList<Integer> before_gauntlet = new ArrayList<Integer>();

        for(int i = 0; i < human.length; i++) {
            before_gauntlet.add(human[i]);
        }

        ArrayList<Integer> after_gauntlet = infinity_gauntlet(before_gauntlet);

        for(int a = 0; a < after_gauntlet.size(); a++) {
            System.out.print(after_gauntlet.get(a)+",");
        }
    }

    public static ArrayList<Integer> infinity_gauntlet(ArrayList<Integer> input) {
        Random random = new Random();
        int size = input.size();
        for(int i = 0; i < size / 2; i++) {
            input.remove(random.nextInt(input.size()));
        }
        return input;
    }
}

문제가 재밌네요 ㅎㅎ

2020/09/15 19:13

nazunamoe

import random 

lst = [2, 3, 1, 6, 5, 7]

if len(lst) % 2 == 0:
    for i in range(len(lst)//2):
        lst.remove(random.choice(lst))
else:
    n = random.randint(len(lst)//2,(len(lst)//2 +1))
    for i in range(n):
        lst.remove(random.choice(lst))

print(lst)

2021/02/19 13:24

asdfa

import random

arr = [2,3,1,6,5,7,9]

random.shuffle(arr)

if len(arr) % 2 == 0:
    print(arr[:len(arr)//2])
else:
    if random.random() < 0.5:
        print(arr[:len(arr)//2])
    else:
        print(arr[:len(arr)//2+1])

2021/03/08 21:08

Ha

import random

def Thanos(a):
    random.shuffle(a)
    if len(a)%2==1:
        b=[len(a)//2,len(a)//2+1]
    else:
        b=[len(a//2)]
    for i in range(random.choice(b)):
        del a[i]
    print(a)

Thanos(list(input("숫자를 입력하세요 : ").split()))

2021/03/13 20:37

fox.j

초보답게

from random import randrange
a = [2, 3, 1, 6, 5, 7]
c = len(a)
for i in range(int(c/2)):
    r = randrange(0,c-i,1)
    del a[r]
print(a)

2021/05/12 23:48

최정호

import random

def infinity(l):
    l2 = len(l)/2
    while len(l)>l2:
        c = random.randint(0,len(l)-1)
        l.pop(c)        
    return l

2021/06/07 14:18

약사의혼자말

python 3.9.5입니다. random.shuffle을 이용해 무작위로 섞은 뒤, 마지막 index를 구해 slicing 했습니다. 소스 코드입니다.

import random

origin = input('리스트를 입력하세요(구분은 공백으로). ').split()
con_int = [int(num) for num in origin]

random.shuffle(con_int)
if len(con_int) % 2:
    if random.random() <= 0.5:
        last_index = len(con_int) // 2
    else:
        last_index = len(con_int) // 2 + 1
else:
    last_index = len(con_int) // 2

print(con_int[0:last_index])

실행 결과입니다.

리스트를 입력하세요(구분은 공백으로). 1 2 3 4
[4, 2]
리스트를 입력하세요(구분은 공백으로). 1 2 3 4
[3, 4]
리스트를 입력하세요(구분은 공백으로). 1 2 3 4
[3, 1]
리스트를 입력하세요(구분은 공백으로). 1 2 3 4 5
[1, 2, 5]
리스트를 입력하세요(구분은 공백으로). 1 2 3 4 5
[4, 2]

2021/07/03 10:01

이준우

import random

def thanos(_list):
    random.shuffle(_list)

    if len(_list) % 2 == 0:
        _last = len(_list)//2
    else:
        if random.random() < 0.5:
            _last = len(_list)//2
        else:
            _last = len(_list)//2 + 1

    return _list[:_last]

if __name__ == '__main__':
    _input = [2, 4, 6, 8, 0]
    print(thanos(_input))

2021/07/20 09:08

DSHIN

import random
def half(List):
    if len(List) %2==0:
        return random.sample(List, int(len(List)/2))
    else:
        if random.randint(0,1) == 0:
            return random.sample(List, int((len(List)-1)/2))
        else:
            return random.sample(List, int((len(List)+1)/2))

2021/08/08 23:37

Percy

import random
S=[1,2,3,4,5,6,7]

if len(S)%2==1:
    a=random.randint(0, 1)
    b= (len(S)//2)+a
else:
    b= len(S)/2

result=[]
for i in range(b):
    data=random.choice(S)
    S.remove(data)
    result.append(data)

print(result)

2021/08/16 16:24

trim39r

#codingdojing_area_of_finger_snap
# 
# 1. 홀수개인 경우 몇개를 삭제할지 랜덤
# 2. 어떤 숫자들을 삭제할지 랜덤
# - list를 랜덤하게 섞은 뒤 pop()을 삭제할 개수만큼.
# - 랜덤한 index를 만들어서 새롭게 return

import random

def finger_snap(original: list):

    random.shuffle(original)
    if len(original)%2 == 0: #even
        for i in range(len(original)//2):
            original.pop()
    else: #odd
        for i in range(len(original)//2 + round(random.random())):
            original.pop()

    return original

input_1 = [2, 3, 1, 6, 5, 7]
input_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]


print(finger_snap(input_1))
print(finger_snap(input_2))

2021/10/17 18:22

Jaeman Lee

def delete_half(s):

for i in range(int(len(s)/2)):

    s.remove(np.random.choice(s))

return s

print(delete_half([2, 3, 1, 6, 5, 7]))

2021/11/14 06:02

kim ih

import random

arr =[]
n = int(input("리스트의 크기는?"))

for i in range(n):
    print(i+1,"번째")
    arr.append(input("원소를 입력하시오"))

print("기존 리스트:",arr)
if n%2 ==0:
    for k in range(int(n/2)):
        arr.pop(random.randint(0,len(arr)-1))
else :
    for k in range(int(n//2)+random.randint(0,1)):
         arr.pop(random.randint(0,len(arr)-1))

print("제거이후:",arr)

2022/01/14 23:13

양캠부부

// Rust

use rand::Rng; use rand::seq::SliceRandom; fn thanos() {

let mut a = vec![2, 3, 1, 6, 5, 7, 8];
let l = a.len();
let mut rng = rand::thread_rng();

// 홀수인 경우 랜덤하게 길이 +1 증가
let mut l_ = 0;
if a.len() % 2 != 0 && rng.gen::<f64>() <= 0.5 { l_ += 1;}

a.shuffle(&mut rng);
println!("{:?}", &a[..l/2+l_]);

}

2022/01/30 08:49

JW KIM

a=[2, 3, 1, 6, 7]

import random

if len(a)%2 ==0:
    try_number = int(len(a)/2)
else:
    try_number = int(len(a)/2+random.choice([0,1]))

fl = finger_list = []

while len(fl) < try_number:
    ran = random.choice(a)
    fl.append(ran)
    a.remove(ran)

print(finger_list)   

2022/02/18 13:18

로만가

약간의 오류가 있습니다. - 중복해서 인덱스 값을 지우면 에러가 납니다...

package org.javaturotials.ex;
import java.util.*;
import java.util.stream.Collectors;

public class test {
    public static void main(String[] args) {
        int[] arrn = {2, 3, 1, 6 ,5 ,7, 7};
        int cv = 0;
        int pa=0;
        ArrayList<Integer> arr = (ArrayList<Integer>) Arrays.stream(arrn).boxed().collect(Collectors.toList());
        int count = arrn.length/2;
        if(count%2==0) cv=0;
        if(count%2!=0) cv=(int)(Math.random()*2+0);
        for(int i=0; i<count+cv; i++) {
            int a = (int)(Math.random()*arrn.length + 0);
            if(a==pa) { a = (int)Math.random()*arrn.length+0;}
            arr.remove(a);
            pa=a;
            }
        for(int i=0; i<arr.size(); i++) {
            System.out.printf(arr.get(i) + " ");
        }
    }
    }

2022/02/19 20:11

Kkubuck

pop을 이용했기 때문에 원소의 순서도 매번 바뀝니다.

from random import randint, random, shuffle

a=[1,2,3,4,5,6,7,8,9]

if len(a)%2==0: #리스트 길이가 짝수
    times=0
    while times<=len(a)//2:
        times+=1
        shuffle(a)
        a.pop()
    print(a)
else: #리스트 길이가 홀수
    times=0
    while times<=len(a)//2+randint(0,1):
        times+=1
        shuffle(a)
        a.pop()
    print(a)

2022/03/04 21:40

코딩초보박영규

import random
import math

quiz = [1, 2, 3, 4, 5, 6, 7]

if len(quiz) % 2 != 0:
    num = random.randint( math.floor(len(quiz)/2), math.ceil(len(quiz)/2) ) 
    answer = random.sample(quiz, num) 
else:
    answer = random.sample(quiz, int(len(quiz)/2))

print(sorted(answer))

2022/03/21 21:43

kh ahn

올림내림이 필요없고 그냥 랜덤 초이스 0 1을 해서 반나눈값에 더하면되는거엿네.. - kh ahn, 2022/03/21 21:59
import java.util.*;


public class Tanos {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("랜덤하게 반을 날려버릴 인원들의 번호를 입력하시오.");

        String [] arr = sc.next().split(",");
        ArrayList<Integer> list = new ArrayList<Integer>();
        Random r = new Random();

        for(int i=0; i<arr.length; i++) {
            list.add(Integer.parseInt(arr[i]));
        }

        int half = list.size()/2;
        int NoE = r.nextInt(2); // 0~1까지.
        int Rnum = r.nextInt(list.size());

        if(arr.length%2 == 0) {
            for(int i=0; i<half; i++) {
                list.remove(Rnum);
                Rnum = r.nextInt(list.size()); // 줄어든 list.size()를 초기화
            }
        } else {
            for(int i=0; i<half+NoE; i++) { // NoE가 1이 되면 추가로 하나 삭제
                list.remove(Rnum);
                Rnum = r.nextInt(list.size());      
            }

        }
        System.out.println("타노스가 손가락을 튕깁니다. 인원의 반이 사라집니다.");
        System.out.println(list);

    }

}

2022/03/28 15:57

휴일의잠만보

import random a=[2, 3, 1, 6, 5, 7,9] if len(a)%2==1: range_a=(len(a)//2)+random.randint(0,1) else: range_a=len(a)//2 for i in range(range_a): del a[random.randint(0,len(a)-1)]

2022/04/19 17:22

yunjae

a = int(input('몇개를 입력하시겠습니까? '))
c = []
e = [1,2]
for ii in range(a):
  b = int(input('숫자를 입력하시오. '))
  c.append(b)
d = int(a/2)
print('{}를 입력하셨습니다.'.format(c))
import random as rd
if not a%2 == 0:
    rd.choice(e)
    if rd.choice(e) == 1:
        d = d + 1
print('타노스가 스냅을 합니다.')
f = input('아무키나 누르시오.')
print(rd.sample(c, d))

python

2022/07/24 20:35

Tae Joo

import random
import math

cmd = input("숫자를 입력하시오 :").split(",")

number_list = []

for i in cmd:
    number_list.append(int(i))                        #정수로 이루어진 리스트 생성

num = len(number_list) / 2                            #뽑을 갯수 정하기

sample_list = [math.floor(num), math.floor(num) + 1]

sample_number = random.sample(sample_list, 1)         #무작위로 리스트에 선정될 숫자 정하기

select_number = sample_number[0]

select_list = random.sample(number_list, select_number)     #무작위로 리스트에 포함시킬 숫자 선별

print(select_list)

조금 복잡하게 된거같기는 하네요

2022/08/19 01:27

박종훈

import random

a = list(map(int, input().split()))
length = len(a)
if length%2 == 1:
    length = int((int(length) + random.choice([-1,1]))/2)
else:
    length = int(int(length)/2)
for _ in range(length):
    del a[random.randint(0,length-1)]
print(a)

2022/09/08 00:32

준표장

import random
x = 0
a = []
while (x != "end"):
    x = input("숫자 입력(그만 입력시 end) : ")
    if (x == "end"):
        continue
    a.append(int(x))

if (len(a) % 2 == 0):
    for i in range(len(a) // 2):
        a.remove(random.choice(a)) 
else:
    for i in range(len(a) // 2  + random.randint(0, 1)):
        a.remove(random.choice(a))
print(a)

2022/09/12 01:11

코딩재미

from random import *

def lst(a):
    if len(a) % 2 == 1:
        x=len(a)+randint(0,1)
    else :
        x=len(a)

    while len(a) > x / 2 :
        a.pop(randrange(len(a)))

    print(a)

lst([2, 3, 1, 6, 5, 7, 8])



2022/09/21 15:20

어필힝

import random

a = input("입력: ")
a = a.split()
length = len(a) / 2

x = random.randrange(1, len(a)+1)
y = random.randrange(1, 3)

list = []

if len(a) % 2 == 1:
    if y == 2:
        x = random.randrange(1, len(a)+1)
        list.appned(x)
    for i in range(int(length)):
        x = random.randrange(1, len(a)+1)
        list.append(x)
else:
    for i in range(int(length)):
        x = random.randrange(1, len(a)+1)
        list.append(x)

print(list)

2022/11/11 10:07

­류예린

import random

exec('d='+input())
n = len(d)/2
print(random.sample(d,int(n))) if int(n)-float(n)==0 \
    else print(random.sample(d , *random.sample({int(n),int(n)+1},1)))

2022/12/21 13:44

박대선

import java.util.Arrays;

public class Test15 {

    public static void main(String[] args) {
        int[] input = { 1, 2, 4, 5, 13, 15 ,17 };
        int[] random;
        // input배열이 홀수인지 검사
        if (input.length % 2 == 1) {
            // input0~1번째 인덱스를 랜덤으로 뽑아 홀,짝 검사 실행
            if (input[(int) (Math.random() * 2)] % 2 == 1) {
                // 홀수일경우 input배열길이를 +1하고 2로 나눈다
                random = new int[(input.length + 1) / 2];
            } else {
                // 짝수일경우 input배열길이를 2로 나눈다
                random = new int[input.length / 2];
            } } else {
            random = new int[input.length / 2];
        }
        for (int i = 0; i < random.length; i++) {
            // input배열 인덱스 랜덤에 저장
            random[i] = (int) (Math.random() * input.length);
            random[i] = input[random[i]];
            for (int k = 0; k < i; k++) {
                // 중복제거
                if (random[i] == random[k]) {
                    i--;
                }
            }
        }System.out.println(Arrays.toString(random));
    }
}

2023/06/15 23:31

구관모

using System;
using System.Linq;

namespace solution
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = { 2, 3, 1, 6, 5, 7, 10 };
            Random rnd = new Random();
            arr = arr.OrderBy(x => rnd.Next()).ToArray();
            int len = arr.Length/2 + (arr.Length % 2 == 1 ? rnd.Next(0, 2) : 0);
            int[] res = new int[len];
            for (int i = 0; i < len; i++)
                res[i] = arr[i];
            Console.WriteLine("\n  [{0}]", string.Join(", ", res));
        }
    }
}

2023/09/24 16:17

insperChoi

import random

def random_oracle():
    return random.choice([True, False])

def finger_snap(people):
    target = len(people)//2

    if len(people)%2 != 0:
        coin_toss = random_oracle()
        if coin_toss:
            target += 1

    print(target)
    for i in range(target):
        target_value = random.choice(people)
        people.remove(target_value)

    return people

a  = [2,3,1,6,5,7,9]

print(finger_snap(a))

2025/05/14 16:28

장재영

목록으로