1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓여있 다. 각 카드의 위치는 카드 위에 적힌 숫자와 같 이 1부터 20까지로 나타낸다.
이제 여러분은 다음과 같은 규칙으로 카드의 위치 를 바꾼다: 구간 [a,b] (단, 1≤a≤b≤20) 가 주어지면 위치 a부터 위치 b까지의 카드를 현 재의 역순으로 놓는다.
예를 들어, 현재 카드가 놓인 순서가 위의 그림과 같고 구간이 [5,10]으로 주어진다면, 위치 5부터 위치 10까지의 카드 5,6,7,8,9,10을 역순으 로 하여 10,9,8,7,6,5로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.
이 상태에서 구간 [9,13]이 다시 주어진다면, 위 치 9부터 위치 13까지의 카드 6,5,11,12,13 을 역순으로 하여 13,12,11,5,6으로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다.
오름차순으로 한 줄로 놓여있는 20장의 카드에 대해 10개의 구간이 주어지면, 주어진 구간의 순 서대로 위의 규칙에 따라 순서를 뒤집는 작업을 연속해서 처리한 뒤 마지막 카드들의 배치를 구하 는 프로그램을 작성하시오.
입력 총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진 다.
i번째 줄에는 i번째 구간의 시작 위치 ai와 끝 위치 bi가 차례대로 주어진다.
이때 두 값의 범위는 1≤ai≤bi≤20이다.
출력 1부터 20 까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했 을 때 마지막 카드들의 배치를 한 줄에 출력한다.
입력 예시:
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
출력 예시: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
출처: 2015 KOI지역본선 고등
90개의 풀이가 있습니다.
cards = range(1,21)
for i in range(10):
a,b = map(int, raw_input().split())
cards = cards[:a-1]+list(reversed(cards[a-1:b]))+cards[b:]
print ' '.join([str(x) for x in cards])
package sss;
import java.util.Scanner;
public class Reverse_Card {
public static void main(String[] args) {
int[] card = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int[] arg = new int[2];
Scanner scan = new Scanner(System.in);
for(int i = 0; i < 10; i++){
arg[0] = scan.nextInt();
arg[1] = scan.nextInt();
System.out.println(arg[0] + " " +arg[1]);
card = reverse_card(arg[0], arg[1], card);
}
for(int i = 0; i < 20; i++)
System.out.print(card[i]+ " ");
}
private static int[] reverse_card(int i, int j, int[] card) {
int[] arrangment = new int[2];
for(;i <= j;i++,j--){
arrangment[0] = card[i-1];
arrangment[1] = card[j-1];
card[i-1] = arrangment[1];
card[j-1] = arrangment[0];
}
return card;
}
}
JAVA
import java.util.*;
public class MixMatch{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[] card = new int[20];
for(int i=0;i<20;i++){
card[i]=i+1;
}
for(int i=0;i<10;i++){
System.out.print("Enter two numbers: ");
int a=input.nextInt();
int b=input.nextInt();
for(int j=a;j<b;j++){
for(int k=a;k<(b-(j-a));k++){
int temp=card[k-1];
card[k-1]=card[k];
card[k]=temp;
}
}
for(int k:card)
System.out.println(k);
}
}
}
#include<cstdio>
int main(){int a,b,c[20],d,i,j,k;for(i=0;i<20;i++)c[i]=i+1;for(i=0;i<10;i++){scanf("%d%d",&a,&b);a--;b--;j=a;k=b;for(;;){d=c[j];c[j]=c[k];c[k]=d;if(j==a+(b-a)/2)break;j++;k--;}}for(i=0;i<20;i++)printf("%d ",c[i]);}
p1 = open( "cardun.text", "r")
aa = []
for i in range(1,20+1):
aa.append ( i )
for line in p1 :
a,b = map(int, line.split())
bb = aa[a-1:b]
bb.reverse()
aa[a-1:b] = bb
print aa
Python 2.7
a = range(21)
for i in range(10):
p = map(int, raw_input().split())
a[p[1]:p[0]-1:-1] = a[p[0]:p[1]+1]
print ' '.join(map(str, a[1:]))
void exce91()
{
int a, b;
int arr[20] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
for (int i = 0; i < 10; i++)
{
scanf_s("%d %d", &a, &b);
while (a < b)
{
int temp = arr[a - 1];
arr[a - 1] = arr[b - 1];
arr[b - 1] = temp;
a++;
b--;
}
}
for (int i = 0; i < 20; i++)
printf("%d ", arr[i]);
}
# -*- coding: cp949 -*-
card_entry = []
for num in range(1, 21):
card_entry.append(num)
count = 1
while count < 11:
print "%d번째 입력" %count
a = input("a를 입력하시오: ")
b = input("b를 입력하시오: ")
if a > b:
print "a must be equal to or less than b"
continue
if a > 20 or b > 20:
print "Input value must be equal to or less than 20"
continue
lst_temp = card_entry[a - 1 : b]
lst_temp.reverse()
card_entry[a - 1 : b] = lst_temp
count += 1
print card_entry
C++로 해보았는데 아직 프로그래밍초보라 자신감이 없네요...
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char cArray[20], cFor, cSave, cCount; //http://codingdojang.com/scode/486
int iShift[2];
for (cFor = 0; cFor < 20; cFor++)
{
cArray[cFor] = cFor + 1;
}
for (cCount = 1; cCount <= 10; cCount++)
{
scanf("%d%d", &iShift[0], &iShift[1]);
for (cFor = 0; cFor < (iShift[1] - iShift[0]+1)/2; cFor++)
{
cSave = cArray[cFor+iShift[0]-1];
cArray[iShift[0] + cFor-1] = cArray[iShift[1] - cFor-1];
cArray[iShift[1] - cFor-1] = cSave;
}
}
for (cFor = 0; cFor <= 19; cFor++)
{
printf("%2d ", cArray[cFor]);
}
}
prev = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
start = []
end = []
for i in range(10):
a = input()
token = a.split()
start.append(int(token[0])-1)
end.append(int(token[1]))
for i in range(len(start)):
a = start[i]
b = end[i]
x = prev[:a]
y = prev[a:b]
z = prev[b:]
y.reverse()
prev = x + y + z
print(prev)
Sub Main()
Dim oArr() As Integer = Enumerable.Range(1, 20).ToArray
For k As Integer = 1 To 10
Dim input As String = Console.ReadLine
Dim n As Integer = input.Split(" ")(0) - 1
Dim m As Integer = input.Split(" ")(1) - 1
For j As Integer = n To n + (m - n) / 2
Dim tmp As Integer = oArr(j)
oArr(j) = oArr(m - (j - n))
oArr(m - (j - n)) = tmp
Next
Next
Console.WriteLine(String.Join(" ", oArr))
End Sub
card = list(range(1,21))
for i in range(10):
partial_range = input('Enter a, b (1<= a < b <=20): ').split()
a, b = int(partial_range[0]), int(partial_range[1])
if a == 1:
card[a-1:b] = card[b-1::-1]
else:
card[a-1:b] = card[b-1:a-2:-1]
$org = array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");
function reverse_card (&$arr, $start, $end) {
$target = array_slice($arr, $start, ($end - $start));
$rev = array_reverse($target);
$max = sizeof($target);
for ($i = 0; $i < $max; $i++) {
$arr[$i + $start] = $rev[$i];
}
}
for ($j = 1; $j < 11; $j++) {
reverse_card($org, $j, $j);
}
Ruby
rev = ->nums,pos { a,b=pos; nums.insert(a-1,*nums.slice!(a-1..b-1).reverse) }
r_cards= -> { puts (1..10).map{gets.split.map &:to_i}.reduce([*1..20], &rev)*' ' }
Test
cards = [*1..20]
expect( rev[cards, [5,10]] ).to eq [1,2,3,4,10,9,8,7,6,5,*(11..20)]
rev_commands = (1..10).map {|e|"#{e} #{e}\n"}.join
result_cards = [*"1".."20"].join(" ")+"\n"
$stdin = StringIO.new(rev_commands)
expect{ r_cards.call }.to output(result_cards).to_stdout
생각보다 간단하게 끝나서 어리둥절하네요. 문제를 잘못이해한건가...
ranges = []
for _ in range(10):
ranges.append(tuple([int(x) for x in input().split()][:2]))
cards = list(range(1, 21))
for (a, b) in ranges:
cards[a-1:b] = cards[b-1:a-2:-1]
print(cards)
while __name__ == '__main__':
crds = list(x+1 for x in range(20))
for x in range(10):
a, b = map(int, input().split())
crds[a-1:b] = list(reversed(crds[a-1:b]))
print(' '.join(map(str,crds)))
파이썬 3.5.1
card_entry = []
for num in range(1, 21): card_entry.append(num)
count = 1
while count < 11: print "%d번째 입력" %count a = input("a를 입력하시오: ") b = input("b를 입력하시오: ")
if a > b:
print "a must be equal to or less than b"
continue
if a > 20 or b > 20:
print "Input value must be equal to or less than 20"
continue
lst_temp = card_entry[a - 1 : b]
lst_temp.reverse()
card_entry[a - 1 : b] = lst_temp
count += 1
print card_entry
Python 3.4.4
cards = list(range(0, 21))
for i in range(10):
s, e = map(int, (input().split()))
cards[s:e+1] = cards[e:s-1:-1]
print(cards[1:])
#파이썬3.5.1
numbers = [x for x in range(1,21)]
for i in range(10):
start,stop = map(int,input().split())
start -= 1
numbers = numbers[:start] + numbers[start:stop][::-1] + numbers[stop:]
print(' '.join(list(map(str,numbers))))
C#으로 작성했습니다.
public List<int> ReverseCardOrder(List<int[]> inputs)
{
var output = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (var input in inputs)
output.Reverse(input[0], input[1] - input[0]);
return output;
}
제가 작성한 C++ code입니다. 주어진 범위에서 카드를 역배치하는 과정을 simulate 해줬어요 (사실 STL에 있는 reverse()를 써도 될 것 같았지만 ㅋㅋㅋ)
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector<int> a;
for (int i = 0; i < 20; i++){
a.push_back(i+1);
}
for (int i = 0; i < 10; i++){
int start,end;
scanf("%d %d",&start,&end);
--start,--end;
int mid;
if ((end-start)%2 == 0) mid = (start+end)/2 - 1;
else mid = (start+end)/2;
int idx = 0;
for (int j = start; j <= mid; j++){
swap(a[j],a[end-idx]);
++idx;
}
}
for (int i = 0; i < 20; i++){
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
def do(in_):
card = list(range(1, 21))
in_ = in_.strip().split('\n')
for x in in_:
a, b = map(int, x.strip().split(' '))
if a - b == 0:
continue
card[a - 1:b] = card[b - 1:a - 2:-1]
print(card)
do("""
5 10
9 13
""")
do("""
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
""")
Python 3.5.2에서 작성하였습니다.
void reverse(int arr[], int start, int end) { int i; for (i = start; i <= (start+end-1)/2; i++) { int tmp = arr[i]; arr[i] = arr[start+end-i]; arr[start+end-i] = tmp; } return; }
int main() { int arr[20]; int i, start, end; for (i = 0; i < 20; i++) { arr[i] = i+1; }
for (i = 0; i < 10; i++) {
scanf("%d %d", &start, &end);
reverse(arr, start-1, end-1);
}
for (i = 0; i < 20; i++) { printf("%d ", arr[i]); }
printf("\n");
return 0;
}
arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for x in [input().split(' ') for x in range(10)]:
arr = arr[:int(x[0])-1]+arr[int(x[1])-1:int(x[0])-2:-1]+arr[int(x[1]):]
print(arr)
#### 2017.01.06 D-412 ####
def card(data):
result=list(range(1,21))
for i in range(len(data)):
num=data[i]
inde=[result.index(num[0]), result.index(num[1])]
inde.sort()
temp=result[inde[0]:inde[1]+1]
temp.reverse()
result[inde[0]:inde[1]+1]=temp
return result
card([[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]])
MALTAB 입니다. flipud (또는 fliplr) 을 이용했습니다.
num_array=(1:20).';
for p=1:20
shuffle_num=str2num(input(' ','s'));
num_array(shuffle_num(1):shuffle_num(2))=flipud(num_array(shuffle_num(1):shuffle_num(2)))
end
num_array
cards = list(range(1,21))
count = 0
while count<=10:
ai = int(input())
bi = int(input())
dispose = cards[ai-1:bi]
dispose.sort(reverse=True)
cards = cards[0:ai-1] + dispose + cards[bi:]
count += 1
print(cards)
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.System.in;
public class CardReverse {
static Integer[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
public static void main(String[] args) {
Scanner sc = new Scanner(in);
int[][] n = new int[10][2];
for (int i = 0; i < 10; i++) {
n[i][0] = sc.nextInt();
n[i][1] = sc.nextInt();
}
for (int i = 0; i < 10; i++) {
int s = n[i][0];
int e = n[i][1];
int l = e - s + 1;
int t[] = new int[l];
for (int j = s; j <= e; j++) {
t[j - s] = cards[j - 1];
}
for (int j = s; j <= e; j++) {
cards[j - 1] = t[e - j];
}
}
System.out.println(Arrays.toString(cards));
}
}
#include <stdio.h>
int main(int argc, const char * argv[]) {
int card[21]={0};
int a,b;
int temp;
printf("숫자의 범위를 입력하시오(1-20):");
scanf("%d %d",&a,&b);
for (int i=1; i<21;i++)
{
card[i]=i;
}
if (a>b)
{
temp=a;
a=b;
b=temp;
}
while (a<b)
{
temp=card[a];
card[a]=card[b];
card[b]=temp;
a++;
b--;
}
for (int i=1; i<21;i++) {
printf("%d ",card[i]);
}
puts("");
return 0;
}
package training;
import java.util.ArrayList;
import java.util.Scanner;
public class CardShuffle {
public static void main(String[] args) {
int iCount = 0;
System.out.println("Please Insert SHUFFLE RANGE(From ~ TO)? ex) 4 9");
Scanner sc = new Scanner(System.in);
ArrayList<String> arrIn = new ArrayList<String>();
while(iCount<20){
arrIn.add(sc.next());
iCount++;
}
int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; // card number
ArrayList<Integer> arrList = new ArrayList<Integer>();
for(int i=0;i<arr.length;i++){
arrList.add(i, arr[i]);
}
for(int i=0;i<arrIn.size();i++){
if(i%2==0){
arrList = shuffle(arr,arrList,Integer.parseInt(arrIn.get(i)),Integer.parseInt(arrIn.get(i+1)));
} else {
continue;
}
}
System.out.println(arrList);
}
public static ArrayList<Integer> shuffle(int[] arr, ArrayList<Integer> arrList, int iNum1, int iNum2){
iNum1--; // index이므로 1을 뺀다.
iNum2--; // index이므로 1을 뺀다.
for(int i=0;i<arr.length;i++){
if(i >= iNum1 && i <= iNum2){
arrList.set(i, arr[iNum2-(i-iNum1)]);
} else {
arrList.set(i, arr[i]);
}
}
return arrList;
}
}
list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
def rev(a,b):
insert = list.index(a)
ch=[]
for i in range(a,b+1):
ch.append(list.pop(list.index(i)))
ch.reverse()
k = -1
for i in ch:
k=k+1
list.insert(insert+k,i)
return list
print(rev(5,11))
print(rev(15,19))
Python 3.4.2 List slicing & reverse()
def range_reverse(card,ran): # 구간 역순 섞기 함수
chop = card[ran[0]-1:ran[1]]
chop.reverse()
card[ran[0]-1:ran[1]] = chop
return card
ori = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] # 최초배열
ran = []
for i in range(10):
ran.append(list(map(int,input("Range: ").split(',')))) # 10구간 입력
for a in ran:
range_reverse(ori,a)
print(ori)
class cardreverse:
def __init__(self):
self.list = [i for i in range(1,21)]
self.count = 0
def reverse(self,a,b):
self.count += 1
if self.count > 10:
self.count = 0
self.list = [i for i in range(1,21)]
print("10번 뒤집어서 처음으로 초기화 합니다.")
else:
print("count:",self.count)
list_copy = self.list[(a-1):b]
list_copy.reverse()
self.list[(a-1):b] = list_copy
print("list:",self.list)
asd = cardreverse()
asd.list
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
asd.reverse(6,9)
'''
count: 1
list: [1, 2, 3, 4, 5, 9, 8, 7, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
'''
``````{.python}
asd.reverse(11,17)
'''
count: 2
list: [1, 2, 3, 4, 5, 9, 8, 7, 6, 10, 17, 16, 15, 14, 13, 12, 11, 18, 19, 20]
'''
asd.reverse(13,19)
'''
count: 3
list: [1, 2, 3, 4, 5, 9, 8, 7, 6, 10, 17, 16, 19, 18, 11, 12, 13, 14, 15, 20]
'''
asd.reverse(3,7)
'''
count: 4
list: [1, 2, 8, 9, 5, 4, 3, 7, 6, 10, 17, 16, 19, 18, 11, 12, 13, 14, 15, 20]
'''
``````{.python}
asd.reverse(5,13)
'''
count: 5
list: [1, 2, 8, 9, 19, 16, 17, 10, 6, 7, 3, 4, 5, 18, 11, 12, 13, 14, 15, 20]
'''
``````{.python}
asd.reverse(1,19)
'''
count: 6
list: [15, 14, 13, 12, 11, 18, 5, 4, 3, 7, 6, 10, 17, 16, 19, 9, 8, 2, 1, 20]
'''
``````{.python}
asd.reverse(11,20)
'''
count: 7
list: [15, 14, 13, 12, 11, 18, 5, 4, 3, 7, 20, 1, 2, 8, 9, 19, 16, 17, 10, 6]
'''
``````{.python}
asd.reverse(9,14)
'''
count: 8
list: [15, 14, 13, 12, 11, 18, 5, 4, 8, 2, 1, 20, 7, 3, 9, 19, 16, 17, 10, 6]
'''
``````{.python}
asd.reverse(12,20)
'''
count: 9
list: [15, 14, 13, 12, 11, 18, 5, 4, 8, 2, 1, 6, 10, 17, 16, 19, 9, 3, 7, 20]
'''
``````{.python}
asd.reverse(2,11)
'''
count: 10
list: [15, 1, 2, 8, 4, 5, 18, 11, 12, 13, 14, 6, 10, 17, 16, 19, 9, 3, 7, 20]
'''
``````{.python}
asd.reverse(5,19)
'''
10번 뒤집어서 처음으로 초기화 합니다.
'''
asd.reverse(14,19)
'''
count: 1
list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 18, 17, 16, 15, 14, 20]
'''
javascript
var input =
`1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10`;
var cards = Array.from(Array(20), (v, i) => i + 1);
var data = input.split("\n").map(v => v.split(" "));
for (d of data) {
cards = [
...cards.slice(0, d[0] - 1),
...cards.slice(d[0] - 1, d[1]).reverse(),
...cards.slice(d[1])
];
}
console.log(cards);
초보자 입니다...꾸벅....
List = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
change = []
def ChangeSort(first, last):
InputFirst = first
InputLast = last
change = List[InputFirst-1:InputLast]
del List[InputFirst-1:InputLast]
change.sort()
for i in change :
List.insert(InputFirst-1,i)
print(List)
ChangeSort(3,5)
ChangeSort(4,5)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
LinkedList<Integer> list = new LinkedList<>();
for(int i=1;i<=20;i++)
list.add(i);
for(int i=0;i<10;i++){//10번 반복
System.out.println(i+1 + "번째 구간 a~b까지 (a<b)");
System.out.print("a를 입력하시오 : ");
int guGan1=sc.nextInt();
System.out.print("b를 입력하시오 : ");
int guGan2=sc.nextInt();
int[] guGan = new int[guGan2-guGan1+1];//a~b까지 크기의 배열생성
for(int j=0;j<guGan.length;j++)
guGan[j]=list.get(guGan2-1-j);//list와 역순으로 배열요소 넣음
for(int j=0;j<guGan.length;j++)
list.set(guGan1+j-1, guGan[j]); //list에 필요한 index부분만 set으로 바꿈
}
System.out.println(list);
}
#include <stdio.h>
int main(void)
{
int i, j, start, end, a = 0, tmp;
int cards[20] = {0,};
for(i = 0; i < 20; i++)
cards[i] = i + 1;
for(i = 0; i < 10; i++) {
scanf("%d %d", &start, &end);
while(start + a <= end - a) {
tmp = cards[end - a - 1];
cards[end - a - 1] = cards[start + a - 1];
cards[start + a - 1] = tmp;
a++;
}
a = 0;
}
for(i = 0; i < 20; i++) {
printf("%d ", cards[i]);
}
}
import java.util.*;
public class CardReverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
for(int i=0;i<10;i++)
cards = reverse(sc.nextInt()-1,sc.nextInt()-1,cards);
for(int i=0;i<20;i++)
System.out.print(cards[i] + " ");
}
public static int[] reverse(int start, int end, int[] cards) {
int center = (start+end)/2;
int tmp, i, j=end;
for(i=start; i<=center; i++)
{
tmp = cards[i];
cards[i] = cards[j];
cards[j] = tmp;
j--;
}
return cards;
}
}
import random
input_list = []
numbers = list(range(1,21))
for i in range(10):
input_list.append(sorted(random.sample(numbers,2)))
for a in input_list:
numbers[(a[0]-1):a[1]] = reversed(numbers[a[0]-1:a[1]])
card_list = list(range(1, 21))
def card_reverse() :
global card_list
x, y = int(input("시작 범위 : ")), int(input("끝 범위 : "))
newlist = []
for i in range(x-1, y) :
newlist.append(card_list[i])
card_list[i] = 0
newlist.reverse()
card_list[x-1:y] = newlist[0:]
for f in range(0, 10) :
card_reverse()
print(card_list)
nums = list(range(21))
for line in data.split('\n'):
p, q = map(int, line.split())
while p < q:
nums[p], nums[q] = nums[q], nums[p]
print(nums[1:])
cards = list(range(1, 21))
for i in range(1, 11):
a, b = map(int, input('%d. input a, b : ' %i).split())
cards[a-1:b] = list(reversed(cards[a-1:b]))
print(cards)
print(cards)
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.System.in;
public class Reverse {
static Integer[] cards = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
public static void main(String[] args) {
Scanner sc = new Scanner(in);
int[][] n = new int[10][2];
for (int i = 0; i < 10; i++) {
n[i][0] = sc.nextInt();
n[i][1] = sc.nextInt();
}
for (int i = 0; i < 10; i++) {
int s = n[i][0];
int e = n[i][1];
int l = e - s + 1;
int t[] = new int[l];
for (int j = s; j <= e; j++) {
t[j - s] = cards[j - 1];
}
for (int j = s; j <= e; j++) {
cards[j - 1] = t[e - j];
}
}
System.out.println(Arrays.toString(cards));
}
}
def rev(cd, nl):
tmp=cd
for x,y in nl:
tmp=tmp[:x-1]+list(reversed(tmp[x-1:y]))+tmp[y:]
return(tmp)
cards=list(range(1,21))
nums=[]
while True:
num=tuple(map(int, input().split()))
if len(num)==2: nums.append(num)
if len(nums)==10: break
print(rev(cards, nums))
파이썬 3.6
def cardreverse(inputdata):
a,b = 0,0
datatmp = []
for i in inputdata:
a,b = i[0],i[1]+10
datatmp = data[(a-1):(b-1)]
datatmp.reverse()
data[(a-1):(b-1)] = datatmp
datatmp = []
print("result :",' '.join(data))
if __name__ == "__main__":
data = [str(i) for i in range(1,21)]
inputdata = [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]]
print("data :",' '.join(data))
cardreverse(inputdata)
data : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
result : 10 11 12 13 14 15 16 17 18 19 1 2 3 4 5 6 7 8 9 20
card=[x for x in range(1,21)] cou=0 while True: r=input().split() a=int(r[0]) b=int(r[1]) f=card[a-1:b][::-1] card[a-1:b]=f cou=cou+1 if cou==10:break for i in card: print(i,end=' ')
card=[x for x in range(1,21)]
cou=0
while True:
r=input().split()
a=int(r[0])
b=int(r[1])
f=card[a-1:b][::-1]
card[a-1:b]=f
cou=cou+1
if cou==10:break
for i in card:
print(i,end=' ')
# 파이썬
def rs():
cards = list(range(21))
for m in range(5):
start, end = map(int, input("정수 2개 입력: ").split())
cards[start:end+1] = cards[end:start-1:-1]
print(' '.join(str(s) for s in cards[1:]))
rs()
def shuffle(c):
a = list(range(1, 21))
for i in range(len(c)):
a[c[i][0]-1:c[i][1]] = reversed(a[c[i][0]-1:c[i][1]])
return a
c = list()
while 1:
n = input()
if n == '':
break
c.append(list(map(int, n.split(' '))))
print(shuffle(c))
num_list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for k in range(10):
num_range_list=input().split(' ')
a=int(num_range_list[0])
b=int(num_range_list[1])
if a==b:
continue
num_list=num_list[:a-1]+num_list[b-1:a-2:-1]+num_list[b:]
ans=''
for num in num_list:
ans+=str(num)+' '
print(ans)
자바입니다!!
package CodingDojang;
import java.util.*;
public class ReverseCards {
private static int[] reverseCards(int[] cards, int[][] ranges) {
int temp;
for(int i = 0; i < ranges.length; i++) {
int reverseCount = (ranges[i][1] - ranges[i][0] + 1) / 2;
for(int j = 0; j < reverseCount; j++) {
temp = cards[ranges[i][0] + j];
cards[ranges[i][0] + j] = cards[ranges[i][1] - j];
cards[ranges[i][1] - j] = temp;
}
}
return cards;
}
public static void main(String args[]) {
Scanner scn = new Scanner(System.in);
int[][] ranges = new int[2][2];
int[] cards = new int[20];
for(int i = 0; i < cards.length; i++) {
cards[i] = i + 1;
}
for(int i = 0; i < ranges.length; i++) {
ranges[i][0] = Integer.parseInt(scn.next()) - 1;
ranges[i][1] = Integer.parseInt(scn.next()) - 1;
}
cards = reverseCards(cards, ranges);
for(int i = 0; i < cards.length; i++) {
System.out.printf("%d ", cards[i]);
}
}
}
파이썬으로 작성했습니다.
mylist=[ m for m in range(1,21)]
for n in range(10):
a,b=map(int, input('').split(' '))
tmplist=mylist[a-1:b]
tmplist.reverse()
mylist=mylist[:a-1]+tmplist+mylist[b:]
print(mylist)
Swift입니다.
import Foundation
var numbers = Array(1...20)
func reverse(from: Int, to: Int) {
var start = from - 1
var end = to - 1
while end > start {
numbers.swapAt(start, end)
start += 1
end -= 1
}
}
reverse(from: 10, to: 15)
reverse(from: 1, to: 5)
reverse(from: 3, to: 9)
reverse(from: 12, to: 18)
print(numbers)
def card(mylist):
initial = [i for i in range(1,21)]
for i,j in mylist:
initial = initial[:i-1] + list(reversed(initial[i-1:j])) + initial[j:]
return initial
print(card([[1,1],[2,2],[3,3],[4,4]]))
card = list(range(1,21))
user_lst = []
while True:
a = input()
operands = a.split()
start = int(operands[0])
finish = int(operands[1])
user_lst.append((start,finish))
if len(user_lst) == 10:
break
for pair in user_lst:
idx1,idx2 = pair
card[idx1:idx2+1] = card[idx1:idx2+1][::-1]
print(card)
def reversing(a, b, array):
result = array
result[a:b + 1].reverse()
return result
fa = list(range(1, 21))
for run in range(10):
ans = input()
fa = reversing(int(ans.split()[0]), int(ans.split()[1]), fa)
print(fa)
10개의 구간을 차례대로 입력하면 구간의 값들이 역배치된 결과가 출력됩니다.
Python
card = list(range(1, 21))
work = [[1,1], [2,2], [3,3], [4,4], [5,5], [6,6], [7, 7], [8,8],[9,9],[10,10]]
for i in range(len(work)):
card = card[:work[i][0]-1]+card[work[i][0]-1:work[i][1]][::-1]+card[work[i][1]:]
print(card)
코딩연습
#include <stdio.h>
#include <stdlib.h>
#define MAX_DATA 20
void setNumber(int *arr) {
while(1) {
// scanf의 입력포맷과 다르다면
// rewind함수를 통해 입력버퍼를 되감아 초기화 효과를 준다.
if(scanf("%d %d",&arr[0], &arr[1])==0) {
printf("INPUT ERROR!\n");
rewind(stdin);
}else if((arr[0] > 20 || arr[0] <1) || arr[1] > 20 || arr[1] <1)
printf("입력값의 범위를 초과하였습니다!\n");
else break;
}
}
void ReverseCard(int *card) {
int arr[2];
int temp;
for(int i=0; i<5; i++){
// 무한루프를 통해 구간이 조건을 만족하면 break
// 범위를 벗어났다면 setNumber함수 재호출
while(1) {
setNumber(arr);
if(arr[0]<=arr[1]) break;
printf("입력값의 범위를 초과하였습니다!\n");
}
// 구간에 대해서 카드 뒤집기
for(int j=0; j<=(arr[1]-arr[0])/2; j++) {
temp = card[arr[1]-1-j];
card[arr[1]-1-j] = card[arr[0]-1+j];
card[arr[0]-1+j] = temp;
}
}
}
int main() {
int card[MAX_DATA];
// 숫자 카드 셋팅 후 뒤집기
for(int i=0; i<MAX_DATA; i++) card[i]=i+1;
ReverseCard(card);
// 숫자 카드 출력
for(int i=0; i<20; i++) printf("%d ",card[i]);
return 0;
}
x, y = [], [i for i in range(1,21)]
for _ in range(10): x.append(tuple(map(int,input().split())))
for i in x: y = y[:i[0]-1]+list(reversed(y[i[0]-1:i[1]]))+y[i[1]:]
for i in y: print(i, end=' ')
seq = list()
i = 1
while i <= 20:
seq.append(i)
i = i + 1
class Range:
def set_value(self, left, right):
self.left = left
self.right = right
lst_range = list()
i = 1
while i <= 10:
a = Range()
left = int(input("left"))
right = int(input("right"))
a.set_value(left, right)
lst_range.append(a)
i = i + 1
print("done")
for a in lst_range:
sub_seq = seq[(a.left - 1):a.right]
sub_seq.reverse()
left_seq = seq[:a.left-1]
right_seq = seq[(a. right + 1):]
seq = left_seq + sub_seq + right_seq
print(seq)
저는 python을 사용하였습니다. 이 문제를 풀면서 class를 다시 복습하게 되었네요~ 좋은 문제였습니다^^
C#
using System;
using System.Collections.Generic;
using System.Linq;
namespace CD091
{
class Program
{
static void Main()
{
List<int> cards = Enumerable.Range(1, 20).ToList();
for (int rpt = 1; rpt <= 10; rpt++)
{
int[] input = Console.ReadLine().Split(' ').Select(s => int.Parse(s)).ToArray();
int idx = input[0] - 1;
int count = input[1] - input[0] + 1;
cards.Reverse(idx, count);
}
Console.WriteLine(string.Join(" ", cards));
}
}
}
a <- readline
b <- readline
a <- as.numeric(a)
b <- as.numeric(b)
origin <- c(1:20)
reverse_card <- function(x, a, b){
x[a:b] <- x[b:a]
return(x)
}
reverse_card(origin, a, b)
lists=[i for i in range(1,21)]
n=0
while n<10:
a=int(input('첫번째 범위값'))
b=int(input('두번째 범위값'))
result=[]
for j in range(lists[a]-1,lists[b]):
result.append(j)
result.sort(reverse=True)
for i in range(len(result)):
lists[(a-1)+i]=result[i]
print(lists)
n+=1
def card(n,ask):
cs = list(x for x in range(1,n+1))
for x in range(ask):
ask = list(map(int,input().split()))
cs = cs[:ask[0]] + list(reversed(cs[ask[0]:ask[1]])) + (cs[ask[1]:] if ask[1] != len(cs)-1 else [])
return cs
cardList = list(range(1, 21, 1))
n = 0
while n < 10:
ai, bi = input().split()
ai = int(ai)
bi = int(bi)
# Exception step when ai is 1
if (ai == 1):
cardList[ai-1:bi] = cardList[bi-1::-1]
else :
cardList[ai-1:bi] = cardList[bi-1:ai-2:-1]
# print(cardList)
n += 1
print(" ".join([str(x) for x in cardList]))
start = []
end =[]
card = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for i in range(10):
a, b = map(int, input().split())
start.append(a)
end.append(b)
def change(a, b, card):
temp = []
for i in range(b-1, a-2, -1):
temp.append(card.pop(i))
card[a-1:a-1] = temp
return card
for i in range(10):
change(start[i],end[i],card)
print(card)
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
List<int> Card = new List<int> { };
for (int i = 1; i < 21; i++)
{
Card.Add(i);
}
Card = array(Card, 5, 10);
Card = array(Card, 9, 11);
Card = array(Card, 7, 14);
Card = array(Card, 6, 18);
Card = array(Card, 2, 19);
Card = array(Card, 4, 17);
Card = array(Card, 7, 12);
Card = array(Card, 3, 13);
Card = array(Card, 8, 20);
Card = array(Card, 1, 11);
//임의로 10개
foreach(var i in Card)
{
Console.Write(i + " ");
}
Console.WriteLine();
}
static List<int> array(List<int> card_array, int a, int b)
{
int ai = a - 1;
int bi = b - 1;
for (int i = 0; i < (b - a) / 2; i++)
{
int temp = card_array[ai];
card_array[ai] = card_array[bi];
card_array[bi] = temp;
ai++;
bi--;
}
return (card_array);
}
}
}
list0=list(range(1,21))
for i in range(10):
listt=[]
q,w=map(int,input().split())
for j in range(20):
if q-1<=j<=w-1:
listt.append(list0[w-j+q-2])
else:
listt.append(list0[j])
list0=listt
print(list0)
L = [str(i) for i in range(1, 21)]
def rev(a, b):
global L
assert 1 <= a <= b <= 20
a -= 1
b -= 1
L = L[:a] + L[a:b+1][::-1] + L[b+1:]
for i in range(2):
a, b = map(int, input().split())
rev(a, b)
print(' '.join(L))
Python 3.7
card = list(map(str, range(1, 21)))
inp = [list(map(int, i.split(' '))) for i in input().split('\n')]
for i in inp:
a, b = i
card = card[:a-1] + list(reversed(card[a-1:b])) + card[b:]
print(' '.join(card))
Input
1 3
2 2
3 5
4 4
5 5
6 6
3 7
8 8
9 10
11 16
Output
3 2 7 6 1 4 5 8 10 9 16 15 14 13 12 11 17 18 19 20
dic={1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20}
for j in range(1,11,1):
a,b=input("구간입력: ").split(' ')
a,b=(int(a),int(b))
num=list(range(a,b+1))
key=[]
for i in num:
key.append(dic[i])
key.reverse()
i=0
while i<len(key):
dic[num[i]]=key[i]
i +=1
key.clear()
print(dic.values())
import java.util.*;
public class 카드역배치 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] 회차 = new String[10];
for(int i=0; i<10; i++) {
회차[i] = scan.nextLine();
}
ArrayList<Integer> cards = new ArrayList<Integer>();
for(int i=1; i<21; i++) {
cards.add(i);
}
int[] nums = new int[2];
for(int i=0; i<10; i++) {
String[] scope = 회차[i].split(" ");
nums[0] = Integer.parseInt(scope[0]);
nums[1] = Integer.parseInt(scope[1]);
for(int j=0; j<nums[1]-nums[0]-2; j++) {
Collections.swap(cards, nums[0]-1+j, nums[1]-1-j);
}
}
System.out.println(cards);
}
}
data = list(x for x in range(1,21))
for i in range(10):
a,b = map(int, input().split())
data = data[:a-1]+list(reversed(data[a-1:b]))+data[b:]
print(' '.join((map(str ,data))))
k = list(range(1, 21))
print(k)
for c in range(10) :
inp1, inp2 = map(int, input("INPUT : ").split())
k = k[:inp1-1]+list(reversed(k[inp1-1:inp2]))+k[inp2:]
print(k)
결과 확인하는데 헷갈려서 매번 입력할 때 마다 그 결과를 출력하도록 만들었습니다.
파이썬 3입니다.
card = list(range(1, 21))
for _ in range(10):
r = tuple(map(int, input().split()))
card = card[:r[0] - 1] + list(reversed(card[r[0] - 1:r[1]])) + card[r[1]:]
print(*card)
from math import *
a=[]
for i in range (1,21):
a.append(i)
print ('input=',a)
for i in range (0,10):
b=str(input()).split(' ')
m,n=int(b[0])-1,int(b[1])-1
for j in range (0,ceil((n-m+1)/2)):
temp=a[j+m]
a[j+m]=a[(n-m)-j+m]
a[(n-m)-j+m]=temp
print ('output=',a)
def exc(arr, r):
for si, ei in r:
temp = arr[si-1:ei]
temp.reverse()
arr[si-1:ei] = temp
return arr
def main():
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
input = [[5, 10], [9, 13], [1, 2], [3, 4], [5, 6], [1, 2], [3, 4], [5, 6], [1, 20], [1, 20]]
print(exc(arr, input))
if __name__ == '__main__':
main()
number = list(range(1,21))
print(number)
for i in range(0,10):
low, high = int(input()), int(input())
if low == high:
continue
else:
number[low-1:high+1] = number[high-22:low-22:-1]
print(number)
print(number)
card = [x for x in range(1, 21)]
for i in range(0, 10):
step = input().split(" ")
temp = card[int(step[0]) - 1:int(step[1])]
temp.reverse()
card[int(step[0]) - 1:int(step[1])] = temp
print(card)
def card_reverse():
card=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for i in range(10):
reversenumber=input("")
reverses=reversenumber.split(' ')
bottom=int(reverses[0])
top=int(reverses[1])
while bottom<top:
card[bottom],card[top]=card[top],card[bottom]
bottom+=1
top-=1
return card
print(card_reverse())
nums = list(range(1, 21))
r = []
for _ in range(3):
n = list(map(int, input().split()))
for i in n:
if i<1 or i>20:
raise Exception('1<=a<=b<=20')
r.append(n)
def switch(a, b):
global nums
l = nums[a-1:b]
l.reverse()
nums[a-1:b] = l
return nums
for i in r:
switch(i[0], i[1])
print(nums)
def change_order(ai, bi, input_list):
temp_list = []
for i in range(bi-ai+1):
temp_list.append(input_list[bi-1-i])
# print(input_list, temp_list)
for i in range(bi-ai+1):
input_list[ai-1+i] = temp_list[i]
# print(input_list)
return input_list
card_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# print(change_order(0, 2, [1,2,3,4]))
# print(change_order(1, 3, change_order(1, 3, [1,2,3,4])))
for i in range(1, 11):
temp_range = i
change_order(temp_range, temp_range, card_list)
print('card changed : ', temp_range, temp_range, card_list)
a = list(range(1,21))
count=0
while count<10:
c=[]
q = int(input("시작수를 입력하세요"))
w = int(input("마지막수를 입력하세요"))
if not 1<=q<=w<=20:
print("1<=q<=w<=20 형식의 수를 넣으세요")
break
count+=1
for i in a[q-1:w]:
c.append(i)
del a[q-1:w]
for num in c:
a.insert(q-1,num)
print(a)
#codingdojing_reverse_card
#1 list 사용, mutable
cards = [i for i in range(1,21)]
print(cards)
cnt = 0
while cnt < 10:
cnt += 1
a, b = map(int,input(f"a b (wave: {cnt}): ").split())
cards[a-1:b] = reversed(cards[a-1:b])
print(cards)
list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] def rev(a,b): insert = list.index(a) ch=[] for i in range(a,b+1): ch.append(list.pop(list.index(i))) ch.reverse() k = -1 for i in ch: k=k+1 list.insert(insert+k,i) return list
print(rev(5,12)) print(rev(15,19)) print(rev(3,13))
arr =[]
for k in range(1,21):
arr.append(k)
interval = []
for i in range(10):
while True:
print(i+1,"회차",end="")
a=int(input("시작 구간은?"))
print(i+1,"회차",end="")
b=int(input("끝 구간은?"))
if a>=1 and a<=20 and b>=1 and b<=20 and a<=b:
interval.append([a,b])
break
def Turn (ineterval):
for k in range(10):
start = interval[k][0]
end = interval[k][1]
pop_arr =[]
for i in range(end-start+1):
pop_arr.append(arr[start-1])
arr.pop(start-1)
for j in pop_arr:
arr.insert(start-1,j)
return print("final",arr)
Turn(interval)
card = [num for num in range(1,21)]
for i in range(0,10):
_input = list(map(int,input().split()))
count_rcard = _input[1]-_input[0]+1
for j in range(0,int(count_rcard/2)): card[_input[0]-1+j],card[_input[1]-1-j] = card[_input[1]-1-j],card[_input[0]-1+j]
print(card)
card = [i for i in range(1,21)]
reversecard = []
cardrange = list(range(1,int(input('섞을 횟수 : ')) + 1))
for i in range(0,len(cardrange)):
cardrange[i] = input('\n').split(' ')
for i in cardrange:
reversecard = card[int(i[0])-1 : int(i[1])]
reversecard.reverse()
card[int(i[0])-1 : int(i[1])] = reversecard
print(card)