타노스는 프로그램의 균형을 위해서는 리스트의 원소 절반을 무작위로 삭제해야 한다고 믿고 있다.
타노스가 손가락을 튕겼을 때(프로그램을 실행했을 때) 입력된 리스트에서 절반의 원소를 무작위로 삭제하여 리턴하는 인피니티 건틀렛 프로그램을 작성하시오.
(무작위 삭제이므로 입력값이 같아도 출력값이 매번 달라야 합니다)
입력 예시
[2, 3, 1, 6, 5, 7]
출력 예시 1
[2, 5, 7]
출력 예시 2
[3, 6, 5]
참고: 리스트의 원소가 홀수개일 경우 절반의 확률로 절반보다 많은 원소가 삭제되거나 절반보다 적은 원소가 삭제되어야 합니다.
(만약 리스트의 원소가 7개라면 절반의 확률로 3개 또는 4개의 원소가 삭제됨)
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]
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)
자바입니다
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);
}
}
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)
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)
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)
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)
}
}
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())));
}
}
// 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;
}
즐겁게 풀었던 문제네요 ㅋㅋㅋ 어벤져스의 패배입니다 흑흑
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]
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))
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] + " ");
}
}
}
#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;
}
#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);
}
자바스크립트로 했습니다. 입력된 배열의 길이 반만큼 (홀수의 경우 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 ] . . .
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])
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]))
#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;
}
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.')
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()
파이썬에서 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))
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))
#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;
}
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]
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)
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)
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은 반칙인 거 같습니다.
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);
}
}
}
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)
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)
}
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)
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]))
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))
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)
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)
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))
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)
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]);
}
}
}
}
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)
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();
}
}
}
실제 삭제하는 부분의 코드는 총 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]]
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]
파이썬 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)])
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)
파이썬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)
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)
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)
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)
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)
파이썬인데 너무 기네요 ㅠㅠㅠ 더 열심히 공부하겠습니다!
입력되는 값이 홀수인지 짝수인지 먼저 확인하고 그 다음에 랜덤으로 삭제했습니다.
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;
}
}
}
}
}
}
파이썬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개 원소 삭제
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))
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)
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))
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])
파이선 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))
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)
# 입력받기가 귀찮아 랜덤으로 원소를 생성하였습니다
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)
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)
#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));
}
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])
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)
초보여서 아는 정도로만 간단하게 해봤어오
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
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))
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)
파이썬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))
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]))
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;
}
}
문제가 재밌네요 ㅎㅎ
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)
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])
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()))
초보답게
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)
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
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]
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))
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))
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)
#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))
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]))
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)
// 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_]);
}
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)
약간의 오류가 있습니다. - 중복해서 인덱스 값을 지우면 에러가 납니다...
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) + " ");
}
}
}
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)
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))
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);
}
}
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)]
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
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)
조금 복잡하게 된거같기는 하네요
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)
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)
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])
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)
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)))
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));
}
}
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));
}
}
}
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))