아래 조건에 따라 리스트를 회전하는 프로그램을 작성하시오.
입력값은 한 행의 문자열로 주어지며, 각 값은 공백으로 구분된다.
첫 번째 값은 리스트를 회전하는 양과 방향(음수의 경우 좌측으로, 양수의 경우 우측으로 회전)이다.
첫 번째 값을 제외한 나머지 값은 리스트의 각 항목의 값이다.
회전된 리스트를 문자열로 출력한다.
구현에 이용할 자료구조에 대한 조건이나 제약은 없다.
입력되는 리스트의 항목의 개수는 유한한다.
예 1)
입력: 1 10 20 30 40 50
출력: 50 10 20 30 40
예 2)
입력: 4 가 나 다 라 마 바 사
출력: 라 마 바 사 가 나 다
예 3)
입력: -2 A B C D E F G
출력: C D E F G A B
예 4)
입력: 0 똘기 떵이 호치 새초미
출력: 똘기 떵이 호치 새초미
256개의 풀이가 있습니다.
data = input('회전수와 문자열을 입력하세요. : ').split()
rn = int(data.pop(0)) % len(data)
print(' '.join([(data*3)[len(data) + i - rn] for i in range(len(data))]))
가장 짧은 풀이에 도전합니다. (파이썬) 3 a b c d 를 받으면 3 을 빼고 a b c d a b c d a b c d 로 만들어 가운데에서 앞뒤로 (회전수%길이)만큼 옮깁니다.(양수일떄는 왼쪽 음수일떄는 오른쪽)
결과
회전수와 문자열을 입력하세요. : -2 i miss you so much
you so much i miss
회전수와 문자열을 입력하세요. : 3 i am shin chon gong dol ee
gong dol ee i am shin chon
회전수와 문자열을 입력하세요. : 11 i am a boy haha i love you
i love you i am a boy haha
Python3로 작성했습니다. 많은 분들이 split으로 구현하셨는데요 이는 그다지 효율적인 방법은 아닐듯하여 deque를 이용해 봤습니다.
import collections
datas = input("Input : ").split(" ")
cycleList = collections.deque(datas[1:])
cycleList.rotate(int(datas[0]))
print("Output :", " ".join(cycleList))
결과
Input : 1 10 20 30 40 50
Output : 50 10 20 30 40
def f(target1, str1):
str1 = str1.split(' ')
str1 = str1[-target1:] + str1[0:-target1]
print(" ".join(str1))
f(1, '10 20 30 40 50')
f(4, '가 나 다 라 마 바 사')
f(-2, 'A B C D E F G')
f(0, '똘기 떵이 호치 새초미')
파이썬의 리스트는 음수 인덱스를 지원하기 때문에....
def main(instr):
l = instr.split(" ")
a = int(l.pop(0))
a = a % len(l)
l = l[-a:] + l[:-a]
return " ".join(l)
print main("-2 10 20 30 40 50")
import java.util.*;
public class ListRotation {
public static void main(String[] args) {
List<String> ss = Arrays.asList(new Scanner(System.in).nextLine().split(" "));
LinkedList<String> sss = new LinkedList<>(ss.subList(1, ss.size()));
Integer r = Integer.valueOf(ss.get(0));
while (r > 0) {
sss.push(sss.pollLast());
r--;
}
while (r < 0) {
sss.addLast(sss.pollFirst());
r++;
}
sss.forEach(i -> System.out.print(i + " "));
}
}
파이썬입니다.
def f(s):
t = s.split()
go = int(t[0])
src = t[1:]
result = [None] * len(src)
for i in range(len(src)):
result[(i+go) %len(src)] = src[i]
return " ".join(result)
print f("1 10 20 30 40 50")
print f("-2 A B C D E F G")
result라는 대상을 먼저 만든 후에 이동할 인덱스를 구하여 대입하는식으로 풀어보았습니다.
파이썬은 result[-2]와 같은 마이너스 인덱싱이 되기 때문에 훨씬 수월하네요.
Clojure 코드입니다.
문제에는 안 나와있는데 -12 가 나 다 라 마 같은 경우처럼, 회전량이 리스트의 크기를 초과하는 경우에도 작동하도록 하였습니다. (제가 문제를 작성하였는데, 깜빡하고 빠트렸네요.)
#(if (< 0 %)
(concat (drop (rem % (count %2)) %2)
(take (rem % (count %2)) %2))
(concat (drop (rem (inc (- %)) (count %2)) %2)
(take (rem (inc (- %)) (count %2)) %2)))
while __name__ == '__main__':
a = list(input('입력: ').split()); b = a[1:]
d = (-1 if int(a[0])>=0 else 0)
a = abs(int(a[0]))
for i in range(a):
tmp = b.pop(d)
if d == -1:b[0:1] = [tmp,b[0]]
elif d == 0:b[-1:] = [b[-1],tmp]
print(' '.join(list(x for x in b)))
파이썬 3.5.1 입니다.
파이썬3.4.2
lis = input().split()
n = int(lis[0])
leng = len(lis)-1
lis = lis[1:]*2
if n>=0:
subj = lis[leng-n:2*leng-n]
else:
subj = lis[-n:leng-n]
print(' '.join(subj))
a = input("입력:").split()
b = int(a[0])
del a[0]
if b > 0:
for i in range(b):
a.insert(0, a[len(a)-1])
a.pop()
print(" ".join(a))
if b < 0:
for i in range(len(a)+b):
a.insert(0, a[len(a)-1])
a.pop()
print(" ".join(a))
if b == 0 :
print(" ".join(a))
def L_roataion(a):
b = int(a.pop(0))
list2 = a[-b:]+a[:-b]
return " ".join(list2)
a = input("첫값은 회전량, 나머지는 문자열 입력:").split(" ")
print(L_roataion(a))
print ' '.join((lambda a : a[1:] if a[0] == '0' else a[-int(a[0]):] + a[1:len(a)-int(a[0])] if int(a[0]) > 0 else a[-int(a[0])+1:] + a[1:-int(a[0])+1])(raw_input('?').split()))
파이썬 2.7.6
자바로 만든 코드입니다.
첫번째 입력 값 이후로 쭉 출력하는 방법이에요.... (마지막에 도착하면 처음부터)
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] arg = input.split(" ");
int rotation = Integer.parseInt(arg[0]);
int length = arg.length-1;
if(rotation > 0) {
rotation = (arg.length-rotation)-1;
while(length-- > 0) {
rotation++;
if(rotation >= arg.length) rotation = 1;
System.out.print(arg[rotation]+" ");
}
}else {
int position = rotation*-1;
while(length-- > 0) {
position++;
if(position >= arg.length) position = 1;
System.out.print(arg[position]+" ");
}
}
}
}
Ruby
def rotate(s)
s.split(" ", 2).map{|i|i.split(" ")}.inject{|s, i|i.rotate(-s[0].to_i)}.join(" ")
end
Test
require 'test/unit'
extend Test::Unit::Assertions
assert_equal rotate("1 10 20 30 40 50"), "50 10 20 30 40"
assert_equal rotate("4 가 나 다 라 마 바 사"), "라 마 바 사 가 나 다"
assert_equal rotate("-2 A B C D E F G"), "C D E F G A B"
assert_equal rotate("0 똘기 떵이 호치 새초미"), "똘기 떵이 호치 새초미"
파이썬입니다. 인덱스를 잘 이용하면 좀더 쉽게 할수 있을거 같은데..머리가 잘 안돌아가네요
deepcopy 를 이용한 방법입니다.
import copy
ainput = "0 똘기 떵이 호치 새초미"
alist = ainput.split()
rotation_key = int(alist.pop(0))
templist = copy.deepcopy(alist)
for idx,val in enumerate(templist):
if len(alist) <= idx + rotation_key:
alist[(idx + rotation_key)-len(alist)] = templist[idx]
else:
alist[idx+rotation_key] = templist[idx]
print(alist)
Programming Pearls 에 소개된 reverse를 이용한 기법을 활용 해 보았습니다.
def rotate(a, n):
n = n % len(a)
if n>=0:
pos = len(a) -n
else:
pos = -n
left = a[:pos]
right = a[pos:]
left.reverse()
right.reverse()
ans = left+right
ans.reverse()
return ans
def f(s):
t = s.split()
go = int(t[0])
src = t[1:]
return rotate(src, go)
print f("1 10 20 30 40 50")
print f("-2 A B C D E F G")
# cycling_list.py
def cycling_list(input):
list_input = input.split()
try:
n = int(list_input.pop(0)) % len(list_input)
list_input = list_input[-n:] + list_input[:-n]
return ' '.join(list_input)
except:
print("The first component of input must be integer.")
return False
print(cycling_list("-2 a b c d e f g"))
Python으로 작성하였습니다.
Python 3.4 로 작성했습니다.
input_list = input().split()
n = int(input_list[0])
list_len = len(input_list)
output_list = ['']*(list_len-1)
for x in range (1,list_len):
y = (x+n)%(list_len -1) - 1
output_list[y] = input_list[x]
print(" ".join(output_list))
c#으로 작성했습니다. 간단하게 input을 한번에 받아 list로 전환하고 가장 첫 list이 음수면 좌측으로 양수면 우측으로 회전시켰습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodingDojang
{
class ListTurn
{
static void Main(string[] args)
{
ListTurn.Answer();
Console.Read();
}
public static void Answer()
{
List<string> list = new List<string>();
list = Console.ReadLine().ToString().Split(' ').ToList();
int turn = int.Parse(list[0]);
list.RemoveAt(0);
list = ListTurn(list, turn);
for (int i = 0; i < list.Count; i++)
Console.Write(list[i] + ' ');
Console.Write('\n');
}
public static List<string> ListTurn(List<string> list, int turn)
{
if (turn < 0)
{
int remainder = turn % list.Count;
for (int i = 0; i > remainder; i--)
{
list.Add(list[0]);
list.RemoveAt(0);
}
}
else
{
int remainder = turn % list.Count;
for (int i = 0; i < remainder; i++)
{
list.Insert(0, list[list.Count - 1]);
list.RemoveAt(list.Count - 1);
}
}
return list;
}
public void ListTurn(List<string> inputs, int n)
{
if (n > 0) inputs.Reverse();
var count = Math.Abs(n%inputs.Count);
var moves = inputs.GetRange(0, count);
inputs.RemoveRange(0, count);
inputs.AddRange(moves);
if (n > 0) inputs.Reverse();
}
public List<string> ListTurn(List<string> inputs, int n)
{
if (n == 0) return inputs;
n = n%inputs.Count;
if (n > 0) n = inputs.Count - n;
else n = Math.Abs(n);
var first = inputs.GetRange(0, n);
var second = inputs.GetRange(n, inputs.Count - n);
second.AddRange(first);
return second;
}
public void ListTurn(List<string> inputs, int n)
{
if (n == 0) return;
n %= inputs.Count;
if (n > 0) inputs.Reverse();
var temp = inputs.GetRange(0, Math.Abs(n));
inputs.RemoveRange(0, Math.Abs(n));
inputs.AddRange(temp);
if (n > 0) inputs.Reverse();
}
public void ListTurn(List<string> inputs, int n)
{
if (n == 0) return;
n %= inputs.Count;
n = n > 0 ? inputs.Count - n : Math.Abs(n);
var temp = inputs.GetRange(0, n);
inputs.RemoveRange(0, n);
inputs.AddRange(temp);
}
}
}
Perl
sub rot{
my($i,@a)=@_;$i*=-1;
print "$a[nth($#a,$_)] " for($i..$i+$#a-1);
print "$a[nth($#a,$i+$#a)]";
}
sub nth{
my($s,$o)=@_;
if($o<0){
$o+=$s+1 until $o>=0;
}
if($o>$s){
$o-=$s+1 until $o<=$s;
}
$o
}
python 입니다. 너무 기초적으로 푼 것 같네요.
# -*- coding: utf-8 -*-
import unittest
def func(s):
l = s.split(' ')
print l
n = int(l.pop(0)) # 회전할 숫자
if n >= 0 :
for i in range(n):
l.insert(0, l[len(l)-1])
l.pop(len(l)-1)
else:
for i in range(abs(n)):
l.insert(len(l), l[0])
l.pop(0)
return " ".join(l)
class Test(unittest.TestCase):
def test1(self):
self.assertEqual('50 10 20 30 40', func('1 10 20 30 40 50'))
self.assertEqual('라 마 바 사 가 나 다', func('4 가 나 다 라 마 바 사'))
self.assertEqual('C D E F G A B', func('-2 A B C D E F G'))
if __name__ == "__main__":
unittest.main()
루비입니다.
def rotate(str)
number, *array = str.split(" ")
number, size = number.to_i, array.size
case number <=> 0
when 1
array = array[-number, number] + array[0, size - number]
when -1
array = array[-number, size - number] + array[0, -number]
end
array.join(" ")
end
require 'test/unit'
extend Test::Unit::Assertions
assert_equal rotate("0 똘기 떵이 호치 새초미"), "똘기 떵이 호치 새초미"
assert_equal rotate("1 10 20 30 40 50"), "50 10 20 30 40"
assert_equal rotate("4 가 나 다 라 마 바 사"), "라 마 바 사 가 나 다"
assert_equal rotate("-2 A B C D E F G"), "C D E F G A B"
def spin(st):
l = st.split()
d = deque(l)
n = d.popleft()
d2 = deque(d,len(d))
d2.rotate(int(n))
print(" ".join(d2))
파이썬 3.4입니다
Sub Main()
Dim src() As String = Split(Console.ReadLine, " ")
Dim vs As New List(Of String)
Dim d As Integer = src(0)
vs.AddRange(src)
vs.RemoveAt(0) '// 방향 제거
For i As Integer = 1 To Math.Abs(d)
If d > 0 Then
Dim tmp As String = vs.Last
vs.RemoveAt(vs.Count - 1)
vs.Insert(0, tmp)
Else
Dim tmp As String = vs.First
vs.RemoveAt(0)
vs.Add(tmp)
End If
Next
Console.WriteLine(String.Join(" ", vs))
Console.ReadLine()
End Sub
옛날 생각나서 C로 해봤습니다. 하고나니깐 매우 허접하게 나오내요....
#include<stdio.h>
#include<stdlib.h>
void reversearr(char *arr[], char*chagerarr[], int len, int standard);
int main(void)
{
char *arr1[] = {"1", "10", "20", "30", "40", "50"};
char *arr2[] = {"4", "가", "나", "다", "라", "마", "바", "사"};
char *arr3[] = {"-2", "A", "B", "C", "D", "E", "F", "G"};
char *arr4[] = {"0", "똘기", "떵이", "호치", "새초미"};
const int len1 = sizeof(arr1)/sizeof(*arr1);
const int len2 = sizeof(arr2)/sizeof(*arr2);
const int len3 = sizeof(arr3)/sizeof(*arr3);
const int len4 = sizeof(arr4)/sizeof(*arr4);
char *changearr1[len1];
char *changearr2[len2];
char *changearr3[len3];
char *changearr4[len4];
int standard1 = 0, standard2 = 0, standard3= 0, standard4= 0, i,j, newstandard = 0;
standard1 = atoi(arr1[0]);
standard2 = atoi(arr2[0]);
standard3 = atoi(arr3[0]);
standard4 = atoi(arr4[0]);
reversearr(arr1, changearr1, len1, standard1);
reversearr(arr2, changearr2, len2, standard2);
reversearr(arr3, changearr3, len3, standard3);
reversearr(arr4, changearr4, len4, standard4);
return 0;
}
void reversearr(char *arr[], char* changerarr[], int len, int standard)
{
int i,j, newstandard = 0;
if(standard >=0)
{
newstandard = len - standard;
for(j =0, i=newstandard; i<len; i++, j++)
{
changerarr[j] = arr[i];
}
for(i = 1; j<len; i++, j++)
{
changerarr[j] = arr[i];
}
for(i=0; i<len-1; i++)
{
printf("%s ", changerarr[i]);
}
printf("\n");
}
else
{
newstandard = standard* -1+1;
for(j =0, i=newstandard; i<len; i++, j++)
{
changerarr[j] = arr[i];
}
for(i = 1; j<len; i++, j++)
{
changerarr[j] = arr[i];
}
for(i=0; i<len-1; i++)
{
printf("%s ", changerarr[i]);
}
printf("\n");
}
}
public class ListSpiner {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] temp = line.split(" ");
int offset = Integer.parseInt(temp[0]);
for(int i = 1; i < temp.length; i++) {
list.add(temp[i]);
}
for(int i = 0; i < list.size(); i++) {
int index = (i - offset) % list.size();
if(index < 0) {
index += list.size();
}
System.out.print(list.get(index) + (i != list.size() - 1 ? ", " : ""));
}
sc.close();
}
}
static void exce14()
{
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] spl = str.split(" ");
String[] arr = new String[spl.length - 1];
int move = Integer.parseInt(spl[0]);
for (int i = 0; i < arr.length; i++)
{
arr[i] = spl[i + 1];
}
move = arr.length - move;
for (int i = 0; i < arr.length; i++)
{
System.out.printf("%s ", arr[(i + move) % arr.length]);
}
}
def divider(inlist):
palette = []
palette = inlist.split(" ")
rotator = int(palette.pop(0))
palette2 = []
for i in range (0, len(palette)):
i = i % len(palette)
i2 = (i + rotator) % len(palette)
palette2.insert(i2, palette[i])
print(palette2)
print(palette)
parag = input()
divider(parag)
Python 3.4.3으로 짰습니다.
먼저 입력값을 input 메서드로 받은 후, 그 값을 받은 변수 parag를 함수 divider에 대입하는 구조입니다. 함수 divider는 palette라고 하는 빈 리스트를 만들며, 이 빈 리스트에는 앞서의 입력값이 split 메서드에 의해 " "(공백)을 기준으로 나뉘어 하나씩 들어가게 됩니다. 그리고 이 리스트의 첫 항은 회전을 지시하는 값이므로(e.g. '-2' -> 좌측으로 2칸 회전) pop 메서드로 따로 빼내 두어 변수 'rotator'를 선언하였습니다. 그런 다음에는 비어 있는 리스트(회전이 끝난 후의 원소들을 삽입할 공간. palette2라 이름함)를 하나 더 만들고, 반복문을 수행하였습니다. 이때, 파이썬은 음수의 인덱스도 인정하기 때문에 회전의 방향은 고려할 필요가 없었으며, 요점은 매 palette의 'i' 번 항이 palette2 리스트의 i + rotator번 항이 되도록 하여 주는 것입니다. 이때 i + rotator를 그냥 대입하면 인덱스값이 자칫 범위 밖으로 넘어갈 수 있으므로, 원래의 리스트인 palette의 길이 (len(palette))로 나누고 그 나머지를 반환하도록 해 줍니다. 이 경우, 예컨대 원래의 리스트가 5개 항을 가지고 있었다면, i + rotator는 6이 되겠지만 (i + rotator)%len(palette) 는 1이 되므로, 인덱스의 범위 내에서 원하는 대로 순환할 수 있습니다(실제로는 5, 0이 도출되겠지만 이해를 위하여 자연수로 말하였습니다). 연산 후 palette2와 palette, 양 리스트를 각각 출력해 보면 회전 상황을 알 수 있습니다.
python3입니다.
userInput = input().split()
shift, lst = int(userInput[0]), userInput[1:]
print (' '.join((lst[-shift:] + lst[:(len(lst) - shift) % len(lst)])))
if __name__ == '__main__':
data = input('Enter List: ')
data = data.split(' ')
push = int(data.pop(0))
data = data[-push:] + data[:-push]
print(' '.join(data))
L = raw_input().split()
n = int(L.pop(0))
n = n/abs(n)*(abs(n)%len(L))
out_L = L[-n:]+L[:-n]
for e in out_L:
print e,
inpt = raw_input("input a list, the first one being the number of rotations, divided by spaces:")
l = inpt.split(" ")
front = []
end = []
n = eval(l[0])
l.remove(l[0])
if n >0:
front = l[len(l)-n:len(l)]
end = l[0:len(l)-n]
elif n < 0:
front = l[abs(n):len(l)]
end = l[0:abs(n)]
print front + end
리스트를 짜르는 게 나은지 차례로 빈 리스트에 담는 게 나은지 고민했는데 짜르는 게 나은 것 같았습니다.
RUBY
rotate = ->s,list=s.split { list.rotate(-list.shift.to_i)*' ' }
Test
stay_case = "0 똘기 떵이 호치 새초미"
expect( rotate[stay_case] ).to eq "똘기 떵이 호치 새초미"
fw_case_1 = "1 10 20 30 40 50"
expect( rotate[fw_case_1] ).to eq "50 10 20 30 40"
fw_case_2 = "4 가 나 다 라 마 바 사"
expect( rotate[fw_case_2] ).to eq "라 마 바 사 가 나 다"
bw_case = "-2 A B C D E F G"
expect( rotate[bw_case] ).to eq "C D E F G A B"
더럽습니다..
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 100
#define LEN 5
int main()
{
char nums[MAXLEN][LEN];
char result[MAXLEN][LEN];
int i=0, n, shift;
char buf[MAXLEN * LEN];
char *temp;
memset(nums, 0x00, MAXLEN);
memset(result, 0x00, MAXLEN);
memset(buf, 0x00, MAXLEN * LEN);
gets(buf);
shift = atoi(strtok(buf, " "));
while(1)
{
temp = strtok(NULL, " ");
if (!temp) break;
strcpy(nums[i], temp);
i++;
}
n = i;
if (shift<0) shift = n + shift;
for(i=0;i<n;i++)
{
strcpy(result[(i+shift)%n], nums[i]);
}
for(i=0;i<n;i++)
{
printf("%s", result[i]);
putchar(' ');
}
putchar('\n');
return 0;
}
#include <stdio.h>
#include <string.h>
#define Length 100
void LRotation(int num,int i,char * str[]);
int main(void){
int num,i;
char arr[Length];
char * str[10]={0};
scanf("%d %[^\n]",&num,arr);
if(num==0){
printf("%s\n",arr);
return 0;
}
str[0]=strtok(arr," ");
for(i=1;(str[i]=strtok(NULL," "))!=NULL;i++);
LRotation(num,i,str);
}
void LRotation(int num,int i,char * str[]){
int j;
if(num>0){
for(j=i-(num%i);str[j]!=NULL;j++)
printf("%s ",str[j]);
for(j=0;j<i-(num%i);j++)
printf("%s ",str[j]);
printf("\n");
}
else{
for(j=(-num%i);str[j]!=NULL;j++)
printf("%s ",str[j]);
for(j=0;j<(-num%i);j++)
printf("%s ",str[j]);
printf("\n");
}
}
void rotateList(String s) {
List<String> list = new ArrayList<String>();
String[] temp = s.split(" ");
int offset = Integer.parseInt(temp[0]);
for(int i=1; i<temp.length; i++) {
list.add(temp[i]);
}
for(int i=0; i<list.size(); i++) {
int index = (i - offset) % list.size();
if(index < 0) {
index += list.size();
}
System.out.println(list.get(index));
}
}
참고한 코드임
import collections
n, *a = input().split()
dq = collections.deque(a)
dq.rotate(int(n))
print(' '.join(dq))
Python 3.4
import sys
r = lambda:sys.stdin.readline()
data = r().strip().split(" ")
l = lambda x: int(x) < 0 and -1 or 1
for x in range(abs(int(data[0]))):
if l(data[0]) > 0:
data.insert(1, data.pop(l(data[0]) * -1))
else:
data.append(data.pop(l(data[0]) * -1))
print(" ".join(data[1:]))
파이썬 3.5로 작성되었습니다.
num = input().split(' ')
new = []
#첫번째 숫자가 양수
if int(num[0]) > 0:
for i in range(int(num[0])):
new.insert(0, num.pop(len(num)-1))
for i in range(1, len(num)):
new.append(num[i])
#첫번째 숫자가 음수
elif int(num[0]) < 0:
for i in range(abs(int(num[0]))):
new.append(num.pop(1))
for i in range(len(num)-1, 0, -1):
new.insert(0, num[i])
#첫번째 숫자가 0
else:
for i in range(1, len(num)):
new.append(num[i])
#출력부
for i in new:
print(i, end=" ")
또 굉장히 직관적으로 풀었습니다.
매 문제를 직관적으로 풀다보니 코드가 길어지네요. 여러가지 생각을 하는 훈련을 해야겠습니다.
많이 부족합니다. 감사합니다.
package main
import (
"strings"
"fmt"
"strconv"
"bufio"
"os"
)
func main() {
fmt.Print("Input data: ")
r := bufio.NewScanner(os.Stdin)
r.Scan()
s := r.Text()
ss := strings.Split(s, " ")
data := ss[1:]
v, _ := strconv.Atoi(string(ss[0]))
if v >= 0 {
v = len(data) - v
} else {
v = -v
}
v %= len(data)
data2 := []string{}
data2 = append(data2, data[v:]...)
data2 = append(data2, data[:v]...)
fmt.Print(data2)
}
GCC
j;i;main(a){char s[9];scanf("%d",&a);gets(s);if(a<0)for(;i>=a;s[j++]-32||i--);else for(j=99;i<a;s[j--]-32||i++);s[j+a/abs(a)]=0;a?printf("%s%s",s+j+(a>0)*2,s):puts(s+1);}
Delphi 2010
function fnRotateList(Shift: Integer; const C: array of String): string;
var
i, j, cnt: Integer;
begin
result := '';
cnt := High(C) + 1;
for i := 0 to cnt - 1 do
begin
j := (i - Shift + cnt) mod cnt;
result := result + C[j] + ' ';
end;
end;
procedure TForm4.btnRotateListClick(Sender: TObject);
begin
Memo1.Lines.Add('1 10 20 30 40 50 => ' + fnRotateList(1, ['10', '20', '30', '40', '50']));
Memo1.Lines.Add('4 가 나 다 라 마 바 사 => ' + fnRotateList(4, ['가', '나', '다', '라', '마', '바', '사']));
Memo1.Lines.Add('-2 A B C D E F G => ' + fnRotateList(-2, ['A', 'B', 'C', 'D', 'E', 'F', 'G']));
Memo1.Lines.Add('0 똘기 떵이 호치 새초미 => ' + fnRotateList(0, ['똘기', '떵이', '호치', '새초미']));
end;
a=str(input("입력값 : "))
list_a=a.split()
list_b=[]
a1=int(list_a.pop(0))
if a1 < 0 :
list_a.reverse()
for i in range(abs(a1)):
list_b+=[str(list_a.pop())]
list_b.reverse()
list_c=list_b+list_a
if a1 < 0 :
list_c.reverse()
print(" ".join(list_c))
Python 3.5.2
늅늅입니다. 자바로 풀어봤습니다.
public static void main(String args[])
{
SotrList("1 10 20 30 40 50");
SotrList("4 10 20 30 40 50 60 70 80 90 100 110 120 130 140");
SotrList("7 가 나 다 라 마 바 사 아 자 차 카 타 파 하");
SotrList("2 A B C D E F G H I J K L M N O P");
}
public static void SotrList(String string)
{
String tempStr[] = string.split(" ");
int startIndex = Integer.valueOf(tempStr[0]);
for(int i = startIndex; i < tempStr.length; i++)
{
System.out.print(tempStr[i] + " ");
}
for(int i = 1; i < startIndex; i++)
{
System.out.print(tempStr[i] + " ");
}
System.out.println(" ");
}
결과는
10 20 30 40 50
40 50 60 70 80 90 100 110 120 130 140 10 20 30
사 아 자 차 카 타 파 하 가 나 다 라 마 바
B C D E F G H I J K L M N O P A
이렇게 나옵니다.
링크드 리스트 연습을 위해~
#include <iostream>
#include <stdlib.h>
struct Node {
int size;
char* value;
Node* next;
Node* prv;
int t;
};
void addlist(char val[10], int size);
void printnode(Node *node, int revC);
Node* head;
Node* end;
Node* start;
int count = 0;
void main(void) {
char input[100];
gets(input);
int size = 1;
int revcount = 0;
start = NULL;
head = NULL;
end = NULL;
while(input[size]!=NULL)
size++;
revcount = atoi(input);
char temp[10];
for(int k = 0; k < 10; k++)
temp[k] = 0;
int j = 0;
for(int i = 2; i< size; i++) {
if (input[i] != ' '){
temp[j] = input[i];
j++;
}
if(input[i] == ' ' || input[i+1] == NULL) {
addlist(temp, j);
j = 0;
count++;
for(int k = 0; k < 10; k++)
temp[k] = 0;
}
}
start -> next = end;
end->prv= start;
printnode(start, revcount);
}
void addlist(char val[10], int size) {
Node* temp = (Node*)malloc(sizeof(Node) * 10);
temp->size = size;
temp->value = (char*) malloc(sizeof(char) * size);
for(int i =0 ; i<size ; i++)
temp->value[i] = val[i];
temp->next = NULL;
temp->prv = NULL;
if(start == NULL)
start = temp;
if (head != NULL)
temp->next = head;
if (end != NULL)
end->prv = temp;
head = temp;
end = temp;
}
void printnode(Node *node, int revC)
{
int c= count;
Node* temp = node;
if(revC >= 0) {
while (c > 0)
{
c--;
while(revC >0) {
temp = temp->next;
revC--;
}
for(int i =0 ; i<temp->size ; i++)
printf("%c", temp->value[i]);
printf(" ");
if(revC == 0)
temp = temp->prv;
}
}
if(revC < 0) {
while (c > 0)
{
c--;
while(revC <= 0) {
temp = temp->prv;
revC++;
}
for(int i =0 ; i<temp->size ; i++)
printf("%c", temp->value[i]);
printf(" ");
temp = temp->prv;
}
printf("\n");
}
}
Haskell로 작성하였습니다.
doCycle n xs
| n < 0 = take lenXS $ drop (abs n) $ cycle xs
| n > 0 = take lenXS $ drop (lenXS - mod (abs n) lenXS) $ cycle xs
| otherwise = xs
where
lenXS = length xs
strCycle n xs = do
putStrLn $ "Input : " ++ (show n) ++ " " ++ xs
putStrLn $ "Output : " ++ (unwords $ doCycle n $ words xs) ++ "\n"
-- test function, Just Run
main = do
strCycle 1 "10 20 30 40 50"
strCycle 4 "가 나 다 라 마 바 사"
strCycle (-2) "A B C D E F G"
strCycle 0 "똘기 떵이 호치 새초미"
Input : 1 10 20 30 40 50
Output : 50 10 20 30 40
Input : 4 가 나 다 라 마 바 사
Output : 라 마 바 사 가 나 다
Input : -2 A B C D E F G
Output : C D E F G A B
Input : 0 똘기 떵이 호치 새초미
Output : 똘기 떵이 호치 새초미
string Input = "2 가 나 다 라";
List<String> Strs = Input.Split(' ').ToList<String>();
int Time = int.Parse(Strs.First());
Strs.RemoveAt(0);
string ANS = "";
if(Time<0)
{
Strs.AddRange(Strs.GetRange(0, -Time));
Strs.RemoveRange(0, -Time);
}
if(Time>0)
{
int Count = Strs.Count;
Strs.AddRange(Strs.GetRange(0, Count - Time));
Strs.RemoveRange(0, Count - Time);
}
foreach(string str in Strs)
{
ANS += str+" ";
}
Prelude> let rotate n xs = let l = length xs in take l (drop (mod (-n) l) (cycle xs))
Prelude> let solve s = let (x:xs) = words s in unwords (rotate (read x) xs)
Prelude> solve "1 10 20 30 40 50"
"50 10 20 30 40"
def loop(offset, items):
offset = (abs(offset) % len(items)) * (-1 if offset > 0 else 1)
return items[offset:] + items[:offset]
print(loop(1, [10, 20, 30, 40, 50]))
print(loop(4, ['가', '나', '다', '라', '마', '바', '사']))
print(loop(-2, ['A', 'B', 'C', 'D', 'E', 'F', 'G']))
print(loop(0, ['똘기', '떵이', '호치', '새초미']))
Python 3.5.2에서 작성하였습니다.
문자열 입력으로 다시 풀었습니다.
def loop(in_):
in_ = in_.split(" ")
offset = int(in_.pop(0))
offset = (abs(offset) % len(in_)) * (-1 if offset > 0 else 1)
return ' '.join(in_[offset:] + in_[:offset])
print(loop('1 10 20 30 40 50'))
print(loop('4 가 나 다 라 마 바 사'))
print(loop('-2 A B C D E F G'))
print(loop('0 똘기 떵이 호치 새초미'))
def spin_list(list_):
dire = list_.pop(0)
if dire >= 0:
return [list_[x] for x in range(-dire,len(list_)-dire,1)]
else:
return [list_[x] for x in range(abs(dire),len(list_))]+[list_[x] for x in range(0,abs(dire))]
print(spin_list([1,10, 20, 30, 40, 50]))
print(spin_list([4, '가','나','다','라','마','바','사']))
print(spin_list([-2,'A','B','C','D','E','F','G']))
print(spin_list([0, '똘끼','떵이','호치','새초미']))
#### 2016.12.21 D-428 ####
다른분들 소스보고 다시 해보았습니다... 좀더 생각하면 충분히 간단할수도 있었던걸...ㅠㅠ 깊게 생각할시간이 부족하기도하고 여유있게 한문제에 대해서 깊에 생각해볼수있으면 좋은데 그게 잘안되네요..ㅠㅠ 군대에서 코딩할시간이 한정되있어서 ㅠㅠ 다른분들 코드가 대단합니다 ㅠㅠ..
def spin_list(list_):
dire = list_.pop(0)
return list_[-dire:]+list_[:-dire]
print(spin_list([1,10, 20, 30, 40, 50]))
print(spin_list([4, '가','나','다','라','마','바','사']))
print(spin_list([-2,'A','B','C','D','E','F','G']))
print(spin_list([0, '똘끼','떵이','호치','새초미']))
#### 2016.12.21 D-428 ####
#python 2.7.xx
import collections
insert = "1 10 20 30 40 50".split(" ")
def myqueue(insert):
d = collections.deque(insert)
d.rotate(int(d.popleft()))
return d
print myqueue(insert)
우리에겐 Dequeue 가 있지요
# 입력 시작 #
data= input('입력 : ')
data = data.split(' ')
n= int(data[0])
data.pop(0)
# 입력 끝 #
j=1 # while loop 시작을 위한 변수 정의.
# loop started #
if n>0:
while j<=n:
a=data.pop(len(data)-1)
data.insert(0,a)
j+=1
# 결과값 출력
output=''
for i in data:
output+=str(i)+' '
print (output)
else:
while j<=abs(n): # n <= 0인 경우.
a=data.pop(0)
data.append(a)
j+=1
#결과값 출력
output=''
for i in data:
output+=str(i)+' '
print (output)
# loop ended #
l=input("input:")
k=[x for x in l.split(" ")]
k=k[-int(k[0]):]+k[-len(k)+1:-int(k[0])]
print(" ".join(k))
def rot(data):
data=data.split()
n=int(data[0])
data=data[1:]
result=data[-n:]
del data[-n:]
result+=data
return result
rot("-2 A B C D E F G")
import java.util.LinkedList;
import java.util.Scanner;
public class rotate_list {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String original = scan.nextLine();
LinkedList<String> list = split_original(original);
rotate_and_print(list);
}
private static LinkedList split_original(String original) {
LinkedList<String> list = new LinkedList<String>();
String[] a = original.split(" ");
for(int b = 0; b < a.length; b++){
list.add(a[b]);
}
return list;
}
private static void rotate_and_print(LinkedList<String> list) {
int num = Integer.parseInt(list.poll());
LinkedList<String> rotate_list = new LinkedList<String>();
int size = list.size();
for(int i = 0; i < size; i++){
rotate_list.add(list.get(((size-num)%size+i)%size));
System.out.print(rotate_list.get(i) + " ");
}
}
}
public String listRounder(String input) {
String[] inputArr = input.split(" ");
String[] result = new String[(inputArr.length-1)];
int startPos = Integer.parseInt(inputArr[0]);
for(int i = 0; i <inputArr.length-1;i++){
inputArr[i] = inputArr[i+1];
}
inputArr[inputArr.length-1] = "";
for(int i = 0; i <inputArr.length-1;i++){
if(inputArr.length-1 <= startPos){
startPos -= (inputArr.length-1);
}
if( 0 > startPos){
startPos = (inputArr.length-1) + startPos;
}
result[startPos] = inputArr[i];
startPos++;
}
String strResult = "";
String spc = "";
for(int i = 0; i <result.length;i++){
strResult += (spc + result[i]);
spc = " ";
}
return strResult;
}
#-*- coding:utf-8 -*-
def list_rot (input):
draft = input.split(" ")
n = int(draft[0])
#필요한 array만 나열
array_input = draft[1:]
# n이 양수일때는 pivot을 오른쪽부터 움직여서 구하고
# n이 음수있때는 pivot을 왼쪽부터 움직여야함
pivot = len(array_input)-n if n>0 else abs(n)
array_front = array_input[pivot:]
array_back = array_input[:pivot]
f_array = array_front+array_back
return (" ".join(f_array))
source = input(">>>")
spin = int(source.split()[0])
n = len(source.split()) - 1
res = []
for i in range(-spin, n-spin):
res.append(source.split()[1::][i])
print(' '.join(res))
Python 3.6.1 입력에 대한 exception class 을 넣었습니다. 두가지의 exception 이 있습니다. 1) 회전수가 양의 정수가 아닌 경우 2) 오직 한개의 문자열일 경우. 즉, 문자가 모두 붙어 있거나 공백문자로 나누지 않은 경우
class ShortInputException(Exception):
'''A user-defined exception class
오직 한개의 문자열이거나
공백으로 문자열이 구분되어 있지 않을경우'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
in_str = input("Inter number & strings w/ space: ")
print("Input: {}".format(in_str))
try:
in_list = in_str.split()
if len(in_list) < 2:
raise ShortInputException(len(in_list), 2)
first_num = int(in_list.pop(0))
except ValueError:
print("ValueError: Cycle number is not integer.")
except ShortInputException as short:
print(("ShortInputException: The input was only " +
"{0} string, expected at least {1}")
.format(short.length, short.atleast))
else:
cycle_num = abs(first_num) % len(in_list)
if first_num < 0:
result = in_list[cycle_num:] + in_list[:cycle_num] # 왼쪽으로 회전
else:
result = in_list[-cycle_num:] + in_list[:-cycle_num] # 오른쪽으로 회전
print("Output: ", " ".join(result))
실행결과
C:\Users\djju\AppData\Local\Programs\Python\Python36\python.exe C:/Users/djju/PycharmProjects/test/list_cycling.py
Inter number & strings w/ space: 1 10 20 30 40 50
Input: 1 10 20 30 40 50
Output: 50 10 20 30 40
Inter number & strings w/ space: 1.0 10 20 30 40 50
Input: 1.0 10 20 30 40 50
ValueError: Cycle number is not integer.
Inter number & strings w/ space: x 10 20 30 40 50
Input: x 10 20 30 40 50
ValueError: Cycle number is not integer.
Inter number & strings w/ space: 1,10,20,30,40,50
Input: 1,10,20,30,40,50
ShortInputException: The input was only 1 string, expected at least 2
Python 3으로 작성했습니다. 위 input의 답은 제대로 출력이 되네요.
코드:
class listCirculate:
inputList =[]
def getInput(self):
inputStr = raw_input("Please Insert List: " )
self.inputList = inputStr.split(" ")
def printList(self):
print(self.inputList)
def listShift(self):
count = int(self.inputList.pop(0))
while count != 0:
inputStr = self.inputList.pop(0) if count < 0 else self.inputList.pop()
self.inputList.insert(len(self.inputList), inputStr) if count < 0 else self.inputList.insert(0, inputStr)
count = count + 1 if count < 0 else count - 1
if __name__ == "__main__":
listCir = listCirculate()
listCir.getInput()
listCir.listShift()
listCir.printList()
example = [4,'A','B','C','D','E','F','G']
def rotatecard(original_list):
rotation = original_list[0]
del original_list[0]
if rotation >= 0:
for i in range(rotation):
end = original_list.pop()
original_list.insert(0,end)
if rotation < 0:
for i in range(abs(rotation)):
start = original_list[0]
del original_list[0]
original_list.append(start)
return ' '.join(original_list)
print(rotatecard(example))
def roll_array(arr,n):
size_arr=len(arr)
arrr=[]
for i in range(size_arr):
newnum=(i-n)%size_arr
arrr.append(arr[newnum])
print(arrr)
arr=input().split()
n=arr.pop(0)
n=int(n)
roll_array(arr,n)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("입력 :");
String num = sc.nextLine();
String[] num1 = num.split(" ");
StringBuffer num2 = new StringBuffer();
int a = Integer.parseInt(num1[0]);
if(a>0){//양수일때
int cnt=0;
for(int i =num1.length-a;;i++){
num2.append(num1[i]+" ");
cnt++;
if(cnt==a)break;
}
for(int i=1;i<num1.length-a;i++)
num2.append(num1[i] +" ");
System.out.println(num2.toString());
}else if(a<0){//음수일때
int cnt1=0;
for(int i =Math.abs(a)+1;i<num1.length;i++)
num2.append(num1[i]+" ");
for(int i=1;;i++){
num2.append(num1[i] +" ");
cnt1++;
if(cnt1==Math.abs(a))break;
}
System.out.println(num2.toString());
}else
for(int i=1;i<num1.length;i++){
System.out.print(num1[i] +" ");
}
}
양수/음수 상관 없이 입력 숫자 갯수로 나눈 나머지(0 <= 나머지 < n)만큼 positive rotate 하면 됩니다.
음수에 대해 mod(%)를 하면 음수가 나와서 약간의 트릭을 썼습니다.
javascript
var rotateList = function(input) {
var inputs = input.split(" ")
var [index, array, length, offset] = [+inputs.slice(0, 1)[0],
inputs.slice(1),
inputs.length - 1,
((index % length) + length) % length];
return array.slice(length - offset).concat(array.slice(0, length - offset));
};
console.log(rotateList("1 10 20 30 40 50").join(" "));
console.log(rotateList("4 가 나 다 라 마 바 사").join(" "));
console.log(rotateList("-2 A B C D E F G").join(" "));
console.log(rotateList("0 똘기 떵이 호치 새초미").join(" "));
def Rotation(text):
text2=list(text.split(" "))
seq = int(text2.pop(0))
result=[]
for i in range(len(text2)):
result.insert((i+seq)%len(text2),(text2[i]))
print(result)
Rotation("1 10 20 30 40 50")
Rotation("2 10 20 30 40 50")
Rotation("4 가 나 다 라 마 바 사")
Rotation("-2 A B C D E F G")
Python으로 풀었습니다.
def solve(s):
data = s.split(' ')
items = data[1:]
rot = int(data[0]) % len(items)
return items[rot:] + items[:rot]
[Python 3.6]
def rotation(inStr):
inStrList = inStr.strip().split()
numList = inStrList[1:]
roCnt = int(inStrList[0]) % len(numList)
return " ".join(numList[-roCnt:] + numList[:-roCnt])
print(rotation("1 10 20 30 40 50"))
print(rotation("4 가 나 다 라 마 바 사"))
print(rotation("-2 A B C D E F G"))
print(rotation("0 똘기 떵이 호치 새초미"))
Python: Recursion
list.pop()을 쓰는 게 출제의도에 더 적합해 보입니다만, 그냥 짧게 만들었습니다.
def rotate(rot, lst):
if rot == 0: return lst
elif rot > 0: return rotate(rot-1, [lst[-1]] + lst[:-1])
else: return rotate(rot+1, lst[1:] + [lst[0]])
저장용 a는 옮겨질 칸 숫자이고 num은 list입니다
def pl(a,num):
if a<0:
for i in range(len(num)):
print(num[(i-a+len(num))%len(num) -len(num)],end=' ')
else:
for i in range(len(num)):
print(num[(i-a)%len(num)],end=' ')
def spin(l):
m = []
if l[0] > 0:
t = l[-(l[0]):]
m = t + l[1:-l[0]]
else:
t = l[1:-(l[0])+1]
m = l[-(l[0])+1:] + t
return m
l = [-2, 'a', 'b', 'c', 'd', 'e', 'f', 'g']
spin(l)
public class Example14 {
public static void main(String[] args) {
Example14 ex = new Example14();
String s = "-10 1 2 3 4 5";
String[] sArray = s.split(" ");
int firstNum = Integer.parseInt(sArray[0]);
String[] sNewArray = new String[sArray.length - 1];
System.arraycopy(sArray, 1, sNewArray, 0, sArray.length - 1);
System.out.println(ex.Rotation(sNewArray, firstNum));
}
private String Rotation(String[] sArray, int firstNum) {
int length = sArray.length;
String[] newArray = new String[length];
for (int i = 0; i < length; i++) {
if (firstNum >= 0) {
int index = (i + firstNum) % length;
newArray[index] = sArray[i];
} else {
int index = (i + firstNum) % length >= 0 ?
Math.abs(i + firstNum) % length : length - Math.abs((i + firstNum) % length);
newArray[index] = sArray[i];
}
}
return String.join(" ", newArray);
}
}
음수일때가 좀 안풀려서 억지로 풀었네요... 위에분 보니까 LinkedList로 처리하니까 훨씬 간단하네요.
a = input('Enter the value')
b = a.split(' ')
R = int(b[0])
list1 = b[1:]
list2 = []
len = len(list1)
for i in range(len):
list2.append(0)
if R >= len:
l = R // len
else:
l = 0
if '-' in a:
for P in range(len):
if abs(R) > len:
R = R + len*l
else:
pass
res = P + R
if res < 0:
res = res + len
else:
pass
list2[res] = list1[P]
else:
for P in range(len):
res = P + R - len*l
if res >= len:
res = res - len
else:
pass
list2[res] = list1[P]
print(list2)
Python 3
namespace _201709042
{
class Program
{
static void Main(string[] args)
{
int turn = int.Parse(Console.ReadLine()); // 입력받은 값을 정수형으로 변환
string[] list = Console.ReadLine().Split(' '); // 입력받은 값들을 ' '로 끊어서 리스트저장
string last = string.Empty;
if (turn > 0) // turn이 0보다 크면
{
for (int i = 0; i < turn; i++)
{
for (int a = 0; a < list.Length; a++)
{
if (a == 0)
{
last = list[a]; //첫번째값을 last에저장
list[a] = list[list.Length - 1]; //첫번째값에 마지막값 저장
}
else
{
string temp = list[a];
list[a] = last;
last = temp; //값들의 대이동
}
}
}
}
else if(turn < 0) //turn이 0보다 작으면
{
for (int i = turn; i < 0; i++)
{
for (int a = list.Length-1; a > -1 ; a--)
{
if (a == list.Length-1)
{
last = list[list.Length -1];
list[a] = list[0];
}
else
{
string temp = list[a];
list[a] = last;
last = temp;
}
}
}
}
foreach (string s in list)
{
Console.WriteLine(s);
}
}
}
}
# -*- coding: utf-8 -*-
# python 3.6
def rlst(inp):
inp = inp.split(" ")
(amount, lst) = (int(inp[0]), [s for s in inp[1:]])
if abs(amount) >= len(lst):
amount = amount % len(lst)
if amount < 0:
amount = len(lst) - amount
rst = lst[-amount:] + lst[:-amount]
return rst
print(rlst("1 10 20 30 40 50"))
print(rlst("6 10 20 30 40 50"))
print(rlst("-2 A 1 2 코딩 도장"))
print(rlst("-7 A 1 2 코딩 도장"))
string = input()
string = string.split( )
_list = list(string)
number = []
if int(_list[0]) > 0 :
for num in range(int(_list[0])):
number.append(_list.pop())
_list.remove(_list[0])
for num in range(int(len(number))):
_list.insert(num, number.pop())
print(_list)
else:
for num in range(abs(int(_list[0]))):
_list.remove(_list[0])
number.append(_list[0])
_list.remove(_list[0])
for num in range(int(len(number))):
_list.append(number[num])
print(_list)
package codingdojang;
import java.util.Scanner;
public class ex14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String parse[] = sc.nextLine().split(" ");
String arr[] = new String[parse.length-1];
int a=Integer.parseInt(parse[0]);;
for(int i=1;i<parse.length;i++) {
arr[i-1] = parse[i];
}
String[] res = new String[arr.length];
int count = 0;
if(a>=0) {
for(int i=arr.length-a; i<arr.length; i++) {
res[count++] = arr[i];
}
for(int i=0; i < arr.length-a; i++) {
res[count++] = arr[i];
}
}else {
for(int i=0-a;i<arr.length;i++) {
res[count++] = arr[i];
}
for(int i=0;i<0-a;i++) {
res[count++] = arr[i];
}
}
for(int i=0; i<res.length;i++) {
System.out.println(res[i]);
}
}
}
def lotate_1(list_2):
list_n = list_2[1:]
amount = list_2[0]
lenth = len(list_n)
serial = []
final_1 = []
for i in range(lenth):
move_len = ( lenth - amount + i) % lenth
serial.append(move_len)
for i in serial:
final_1.append(list_n[i])
return final_1
list_ex = [1, 10, 20, 30, 40, 50, 60]
print (lotate_1(list_ex))
# 한글 처리 in Atom 1.21.1 + Anaconda(Python 3.6.3) on Mac
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')
# 아래 조건에 따라 리스트를 회전하는 프로그램을 작성하시오.
# > 조건
# 입력값은 한 행의 문자열로 주어지며, 각 값은 공백으로 구분된다.
# 첫 번째 값은 리스트를 회전하는 양과 방향(음수의 경우 좌측으로, 양수의 경우 우측으로 회전)이다.
# 첫 번째 값을 제외한 나머지 값은 리스트의 각 항목의 값이다.
# 회전된 리스트를 문자열로 출력한다.
# 구현에 이용할 자료구조에 대한 조건이나 제약은 없다.
# 입력되는 리스트의 항목의 개수는 유한한다.
# > 입출력예
# 예 1)
# 입력: 1 10 20 30 40 50
# 출력: 50 10 20 30 40
# 예 2)
# 입력: 4 가 나 다 라 마 바 사
# 출력: 라 마 바 사 가 나 다
# 예 3)
# 입력: -2 A B C D E F G
# 출력: C D E F G A B
# 예 4)
# 입력: 0 똘기 떵이 호치 새초미
# 출력: 똘기 떵이 호치 새초미
input_list = input("입력 : ").split()
rotation_position = int(input_list[0]) % (len(input_list) - 1)
del(input_list[0])
print(' '.join(input_list[-rotation_position:] + input_list[0:-rotation_position]))
inp = [1, 10, 20, 30, 40, 50] # input
rotate_time = inp.pop(0)
if rotate_time < 0:
rotate_time = len(inp) + rotate_time - 1
for _ in range(rotate_time):
inp.insert(0, inp.pop())
print(inp)
def rota(d):
a=d.split(' ')
f=int(a.pop(0))
if f>0:
for n in range(f):
end=a.pop()
a.insert(0,end)
elif f<0:
for i in range(abs(f)):
str=a[0]
del a[0]
a.append(str)
for x in a:
print(x,end=' ')
def rot(tmpp):
tmp=tmpp
n=int(tmp[0])%(len(tmp)-1)
tmp.pop(0)
return(tmp[-n:]+tmp[:-n])
def isnum(tmpp):
try:
float(tmpp)
return(True)
except: return(False)
samp=['a']
while not isnum(samp[0]):
samp=list(map(str, input('첫번째는 정수: ').split()))
print(rot(samp))
problem = "4 가 나 다 라 마 바 사".split()
cycle = int(problem.pop(0))
result = list(x for x in range(len(problem)))
for i,val in enumerate(problem):
result[(i+cycle)%len(problem)] = val
print(result)
import java.util.Scanner;
import java.util.Arrays;
//첫 번째 값은 리스트를 회전하는 양과 방향(음수의 경우 좌측으로, 양수의 경우 우측으로 회전)이다.
//첫 번째 값을 제외한 나머지 값은 리스트의 각 항목의 값이다
public class shiftList {
public static void Left(int n, String[] arr) {
if(n==0) {
System.out.println(Arrays.toString(arr));
return;
}
String s = arr[0];
for(int i=0; i<arr.length-1; i++) {
arr[i]=arr[i+1];
if(i==arr.length-2)
arr[arr.length-1]=s;
}
Left(n-1, arr);
}
public static void Right(int n, String[] arr) {
if(n==0) {
System.out.println(Arrays.toString(arr));
return;
}
String s = arr[arr.length-1];
for(int i=arr.length-1; i>0; i--) {
arr[i]=arr[i-1];
if(i==1) {
arr[0]=s;
}
}
Right(n-1, arr);
}
public static void main(String[] args) {
System.out.println("몇개의 값을 입력할겁니까?");
Scanner s = new Scanner(System.in);
int n=s.nextInt();
int size=n+1;
String[] arr = new String[size];
String[] res = new String[size-1];
System.out.println("먼저 회전변수를 입력해주시고, 그 다음 값을 입력해주십시오.");
for(int i=0; i< size; i++) {
arr[i] = s.next();
}
s.close();
System.out.println(Arrays.toString(arr));
if(arr[0].charAt(0)=='0') {
for(int i=0; i<size-1; i++) {
arr[i] = arr[i+1];
for(int j=0; j<size-1; j++) {
res[j] = arr[j];
}
}
System.out.println(Arrays.toString(res));
}
// 좌측으로 회전
if((int)Double.parseDouble(arr[0]) < 0) {
int v=(int) Double.parseDouble(arr[0]);
v=v*-1;
for(int j=0; j<size-1; j++) {
res[j] = arr[j+1];
}
Left(v, res);
}
// 우측으로 회전
if((int)Double.parseDouble(arr[0]) > 0) {
int v=(int) Double.parseDouble(arr[0]);
for(int j=0; j<size-1; j++) {
res[j] = arr[j+1];
}
Right(v, res);
}
}
}
파이썬 3.6
#양의 방향과 음의방향으로 이동시 각 문자열의 첫 번째 값에 따라 시작점을 찾은 후 순서에 맞게 정렬한다.
string = input(" ● 입력: ")
valuelist = string.split(' ')
newlist = []
if int(valuelist[0]) > 0: # 양의 방향으로 회전
# 인덱스가 0부터 시작하므로 시작점값에서 1을 빼준다.
start = len(valuelist) - int(valuelist[0]) - 1
del valuelist[0]
while valuelist[start]:
newlist.append(valuelist[start])
start += 1
if start > len(valuelist)-1:
break
start = 0
while valuelist[start]:
newlist.append(valuelist[start])
start += 1
if len(newlist) == len(valuelist):
break
print("\n","● 출력:",' '.join(newlist))
elif int(valuelist[0]) < 0: #음의 방향으로 회전
# 음의 방향만큼 문자열의 길이가 커지는 셈이므로 시작점 값에서 문자열 길이만큼 빼준다.
# 음의 방향만큼 이동시 '0'의 위치도 한번 이동한 셈이므로 시작점값에서 1을 빼지 않는다.
start = (len(valuelist) - int(valuelist[0]))-len(valuelist)
# 음의 방향으로 이동시 첫 번째 요소값을 먼저 제거하고 이동한다.
del valuelist[0]
while valuelist[start]:
newlist.append(valuelist[start])
start += 1
if start > len(valuelist)-1:
break
start = 0
while valuelist[start]:
newlist.append(valuelist[start])
start += 1
if len(newlist) == len(valuelist):
break
print("\n","● 출력:",' '.join(newlist))
else: # 회전하지 않음
del valuelist[0]
print("\n","● 출력:",' '.join(valuelist))
*결과값
● 입력: 4 가 나 다 라 마 바 사
● 출력: 라 마 바 사 가 나 다
● 입력: -3 A B C D E F G
● 출력: D E F G A B C
● 입력: 0 똘기 떵이 호치 새초미
● 출력: 똘기 떵이 호치 새초미
a= input() a=a.split() cnt = int(a[0]) a=a[1:] if(cnt> 0): for i in range (0,cnt): temp=a.pop() a.insert(0,temp)
if(cnt<0): for i in range(0,abs(cnt)): temp=a[0] a.append(temp) del a[0]
print(a)
파이썬 입니다.
#sample data
data1 = [1, 10, 20, 30, 40, 50] #50 10 20 30 40
data2 = [4, '가', '나', '다', '라', '마', '바', '사'] #라 마 바 사 가 나 다
data3 = [-2, 'A', 'B', 'C', 'D', 'E', 'F', 'G'] #C D E F G A B
data4 = [0, '똘기', '떵이', '호치', '새초미'] #똘기 떵이 호치 새초미
#main
def rotate(r, data):
return data[-r:] + data[0:len(data)-r if r > 0 else abs(r)]
print(rotate(data1[0], data1[1:]))
print(rotate(data2[0], data2[1:]))
print(rotate(data3[0], data3[1:]))
print(rotate(data4[0], data4[1:]))
import java.util.Scanner;
public class Rotation
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("이동할 수를 입력하시겠습니까 ->");
int num = input.nextInt();
input.nextLine();
System.out.println("문자열을 입력하세요->");
String number = input.nextLine();
String[] m = number.split(" ");
StringBuilder s = new StringBuilder();
if(num>0)
{
int count =0;
for(int j=m.length-num; j<m.length; ++j)
{
s.append(m[j]+" ");
count++;
if(j == m.length-1)
for(int i=0; i<m.length-count; ++i)
s.append(m[i]+" ");
}
}
System.out.println(s.toString());
s.setLength(0); //StringBuilder 초기화
if(num<0)
{
int count=0;
for(int i=Math.abs(num); i<m.length; ++i)
{
s.append(m[i]+" ");
count++;
if(i == m.length-1)
for(int j=0; j<m.length-count; ++j)
s.append(m[j]+" ");
}
}
System.out.println(s.toString());
s.setLength(0); //StringBuilder 초기화
if(num == 0)
{
for(int i=0; i<m.length; ++i)
s.append(m[i]+" ");
}
System.out.println(s.toString());
}
}
파이썬으로 슬라이싱을 이용해 작성했습니다.
a = input('입력: ')
mylist=a.split(' ')
if int(mylist[0])>=0:
for x in range(int(mylist.pop(0))):
mylist=mylist[-1:]+mylist[:len(mylist)-1]
else:
for x in range(int(mylist.pop(0))*(-1)):
mylist=mylist[1:]+mylist[0:1]
print(' '.join(mylist))
리스트를 앞 뒤로 잘라 붙여주면 됩니다.
+ 이든 - 이든 관계 없고
회전할 값이 원소 숫자 이상이면 나눠서 나머지를 사용합니다.
# 파이썬
input_str = input("rotate list: ")
# input_sample = "1 10 20 30 40 50"
def rotate_list(s1):
s1 = s1.split()
l1, rotate = s1[1:], int(s1[0])%(len(s1)-1)
return " ".join(l1[-rotate:] + l1[:-rotate])
print(rotate_list(input_str))
def listrot(a):
b = a[1:]
n = int(a[0])%len(b)
c = list()
for i in range(len(b)):
c.append(b[i-n])
return c
l = input().split(' ')
print(listrot(l))
num_str=input("조건값과 숫자를 입력하세요\n")
num_list=num_str.split(' ')
condition=round(int(num_list[0]))
if condition>0:
condition=condition%(len(num_list)-1)
elif condition<0:
condition=-(-condition%(len(num_list)-1))
num_list=num_list[1:]
len_list=len(num_list)
if condition>0:
print(num_list[len_list-condition:]+num_list[:len_list-condition])
if condition<0:
print(num_list[-condition:]+num_list[:-condition])
if condition==0:
print(num_list)
def rotation():
a=raw_input('type list:')
b=a.split(' ')
n=int(b[0])
b.remove(b[0])
m=n%len(b)
str=""
for x in range(len(b)-m,len(b)):
str=str+b[x]+" "
for x in range(0,len(b)-m):
str=str+b[x]+" "
print str
public class ListSpin {
String[] strArray;
String str;
List<String> list = new LinkedList<String>();
int spinNumber;
public ListSpin(String str) {
this.str = str;
}
public void StringParsing() {
strArray = str.split(" ");
for(int i = 0; i < strArray.length; i++) {
list.add(strArray[i]);
}
spinNumber = Integer.parseInt(list.get(0));
list.remove(0);
}
public void StringSpin() {
int size = list.size();
if(spinNumber > 0) {
for(int i = 0; i < spinNumber; i++) {
list.add(0,list.get(size - 1));
list.remove(size);
}
} else if(spinNumber < 0) {
spinNumber *= -1;
for(int i = 0; i < spinNumber; i++) {
list.add(list.get(0));
list.remove(0);
}
} else {
}
}
public void InfoDisplay() {
for(String st : list) {
System.out.print(st + " ");
}
System.out.println();
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class ListRotation {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputLine = sc.nextLine();
sc.close();
List<String> list = new ArrayList<>(Arrays.asList(inputLine.split(" ")));
int count = Integer.parseInt(list.remove(0));
if(count >= 0){
for(int i = 0; i<count; i++){
list.add(0,list.remove(list.size()-1));
}
}else{
for(int i = 0; i < Math.abs(count); i++){
list.add(list.size()-1, list.remove(0));
}
}
list.forEach(str -> System.out.print(str + " "));
}
}
1 10 20 30 40 50
50 10 20 30 40
4 가 나 다 라 마 바 사
라 마 바 사 가 나 다
-2 A B C D E F G
C D E F G A B
0 똘기 떵이 호치 새초미
똘기 떵이 호치 새초미
/* 리스트 회전 */
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
ex := []string{"1 10 20 30 40 50", "4 가 나 다 라 마 바 사", "-2 A B C D E F G", "0 똘기 떵이 호치 새초미"}
for _, v := range ex {
fmt.Println(rotate(parse(v)))
}
}
func parse(inp string) (int, []string) {
spltLst := strings.Split(inp, " ")
count, _ := strconv.Atoi(spltLst[0])
lst := spltLst[1:]
return count, lst
}
func rotate(r int, lst []string) string {
mov := r % len(lst)
if mov < 0 {
mov = len(lst) + mov
}
rst := append(lst[len(lst)-mov:], lst[:len(lst)-mov]...)
return strings.Join(rst, " ")
}
def turn(str):
mylist = str.split(" ")
index_ini = mylist.pop(0)
index = int(index_ini) % len(mylist)
return ' '.join(mylist[-index:] + mylist[:-index])
print(turn("1 10 20 30 40 50"))
print(turn("4 가 나 다 라 마 바 사"))
print(turn("-2 A B C D E F G"))
print(turn("0 똘기 떵이 호치 새초미"))
a = input()
t = a.split()
y = []
p = int(t[0])
str1 = ""
if p > 0:
for i in range(p):
y.append(t[len(t) - i - 1])
y.reverse()
y = y + t[1 : len(t) - i -1]
if p < 0:
y = t[-p + 1 : len(t)]
for i in range(-p):
y.append(t[i + 1])
if p == 0:
y = t[1 : len(t)]
for j in y:
str1 = str1 + j + ' '
print(str1)
파이썬3
s = input('입력: ').split()
t = int(s[0])
if t > 0:
back = s[-t:]
front = s[1:-t]
result = back + front
elif t == 0:
result = s[1:]
else:
t = abs(t)
front = s[1:1+t]
back = s[1+t:]
result = back + front
print(" ".join(result))
def turn():
x=list(input('회전수와 값을 입력하세요.').split())
k=int(x.pop(0))
for i in range(0,abs(k)):
if k < 0:
a=x.pop(0)
x=x+[a]
else :
a=x.pop(-1)
x=[a]+x
return x
List = input("문자를 입력하세요").split()
x = int(List[0])
del List[0]
for o in range(0,abs(x)):
if x > 0:
List.insert(0,List[len(List)-1])
del List[len(List)-1]
elif x < 0:
List.append(List[0])
del List[0]
print(" ".join(List))
import java.util.ArrayList;
import java.util.Scanner;
public class ListRotation {
private static Scanner scanner;
private static ArrayList rotatedList;
public static void main(String[] args) {
scanner = new Scanner(System.in);
rotatedList = new ArrayList();
int rotationTimes = 0;
int startIndex = 0;
String inputData = new String();
//input data
System.out.print("입력 : ");
inputData = scanner.nextLine();
String[] dataArr = inputData.split(" ");
//processing
rotationTimes = Integer.parseInt(dataArr[0]);
if(rotationTimes<0) {
startIndex = (-1)*rotationTimes+1;
rotationTimes *= (-1);
}
else startIndex = dataArr.length - rotationTimes;
for(int i=startIndex; i<dataArr.length;i++){
rotatedList.add(dataArr[i]);
}
for(int i=1; i<startIndex; i++){
rotatedList.add(dataArr[i]);
}
//output result
for(int i=0; i<rotatedList.size();i++){
System.out.print(rotatedList.get(i)+" ");
}
}
}
Swift입니다.
회전 값의 제한은 없습니다. 단 내부적으로 회전값을 Int에 저장하니 이 크기에 제한됩니다.
import Foundation
let input = readLine()!.split(separator: " ")
let array = Array(input[1..<input.count])
var count = Int(input[0])!
count = count >= 0 ? array.count - (count % array.count) : -1 * count
for i in 0..<array.count {
print( array[ (i + count) % array.count ], terminator: " ")
}
print("")
def t():
q = list(input('Input: ').split())
first = int(q.pop(0))
if first != 0:
a = q[-first:]+q[:-first]
else:
a = q
return(a)
자바입니다.
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int stand = Integer.parseInt(str[0]); // 양수인지 음수인지 기준을 잡음
if (stand > 0) {
stand %= str.length-1; // 기준이 배열 길이를 넘을시 배열 길이로 나머지를 얻으면됨
stand = str.length - stand;
for(int i=stand; i<str.length; i++)
System.out.print(str[i] + " ");
for(int i=1; i<stand; i++)
System.out.print(str[i] + " ");
} else if (stand == 0) {
for (int i=1; i<str.length; i++)
System.out.print(str[i] + " ");
} else {
stand = Math.abs(stand % (str.length-1));
for(int i=stand+1; i<str.length; i++)
System.out.print(str[i] + " ");
for(int i=1; i<=stand; i++)
System.out.print(str[i] + " ");
}
}
아 첨에 양수일 때는 왼쪽으로 가는 줄 알고 그렇게 코딩했는데 똑같이 오른쪽으로 가는 거였네요.
def RotatingString(string): lst = string.split() lst2 = lst[1:] lst3 = [] dic = {} result = ''
if int(lst[0]) == 0 :
return string[1:]
elif int(lst[0]) > 0:
for number in lst2:
idx = lst2.index(number)
new_idx = idx + int(lst[0])
if new_idx > len(lst2) - 1 :
new_idx = new_idx % len(lst2)
dic[new_idx] = number
else:
dic[new_idx] = number
elif int(lst[0]) < 0:
for number in lst2:
idx = lst2.index(number)
new_idx = idx + int(lst[0])
if new_idx < 0:
new_idx = len(lst2) + new_idx
dic[new_idx] = number
else:
dic[new_idx] = number
print(dic)
for key in dic:
pair = key,dic[key]
lst3.append(pair)
lst3 = sorted(lst3, key = lambda k: k[0])
for key,value in lst3:
result = result + str(value) + ' '
return result
print(RotatingString('4 가 나 다 라 마 바 사')) #라 마 바 사 가 나 다 print(RotatingString('-2 A B C D E F G')) # C D E F G A B print(RotatingString(' 3 E F G H A B')) # H A B E F G
importi java.util.*;
public class ListRotation {
public static void main(String[] args) {
List<String> ss = Arrays.asList(new Scanner(System.in).nextLine().split(" "));
LinkedList<String> sss = new LinkedList<>(ss.subList(1, ss.size()));
Integer r = Integer.valueOf(ss.get(0));
while (r > 0) {
sss.push(sss.pollLast());
r--;
}
while (r < 0) {
sss.addLast(sss.pollFirst());
r++;
}
sss.forEach(i -> System.out.print(i + " "));
}
}
public class ListSpiner {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] temp = line.split(" ");
int offset = Integer.parseInt(temp[0]);
for(int i = 1; i < temp.length; i++) {
list.add(temp[i]);
}
for(int i = 0; i < list.size(); i++) {
int index = (i - offset) % list.size();
if(index < 0) {
index += list.size();
}
System.out.print(list.get(index) + (i != list.size() - 1 ? ", " : ""));
}
sc.close();
}
}
def turning(*va):
result = list(va)
if va[0] > 0:
result[:1] = va[va[0] * -1:]
del result[va[0] * -1:]
elif va[0] < 0:
result.extend(va[1:va[0] * -1 + 1])
del result[:va[0] * -1 + 1]
else: del[result[0]]
return result
for run in turning(1, 10, 20, 30, 40, 50):
print(run, end=' ')
Python 3
import java.util.Scanner;
public class ListRotation {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int Rotation = sc.nextInt();
String[] List = sc.nextLine().substring(1).split(" ");
for (int j = 0; j < Math.abs(Rotation); j++) {
String temp = List[Rotation < 0 ? 0 : List.length - 1];
for (int i = 0; i < List.length - 1; i++) {
if (Rotation < 0)
List[i] = List[i + 1];
else
List[List.length - 1 - i] = List[List.length - 2 - i];
}
List[Rotation < 0 ? List.length - 1 : 0] = temp;
}
for (int i = 0; i < List.length; i++) {
System.out.println(List[i]);
}
}
}
inp = input()
inp = inp.split()
split = int(inp[0])
inp = inp[-split:]+inp[1:-split]
print(" ".join(inp))
Python
test = [[1, 10, 20, 30, 40, 50],
[4, "가", "나", "다", "라", "마", "바", "사"],
[-2, "A", "B", "C", "D", "E", "F", "G"],
[0, "똘기", "떵이", "호치", "새초미"]]
#test = input().split(' ')
for t in test:
n = t[0]
lst = t[1:]
ans = list()
if n < 0:
n = abs(n)
n %= len(lst)
ans = lst[n:] + lst[:n]
else:
n %= len(lst)
ans = lst[len(lst)-n:] + lst[:len(lst)-n]
print(ans)
function rotate(input){
let inputs = input.split(' ')
let thisIsThatArray = inputs.slice(1)
let firstNum= inputs[0]
let spliceArr =thisIsThatArray.splice(-firstNum);
spliceArr = spliceArr.concat(thisIsThatArray)
console.log(inputs);
return spliceArr
}
split 와 splice를 통해서 풀었습니다..
먼저 let inputs = input.split(' ' )를 통해서 입력받은 input을 빈공간을 기준으로 분리해서 각 각 배열에 저장하였습니다. 예를들어 '1 10 20 30 40 50' 을 input으로 입력받으면 inputs 은 ['1','10','20','30','40','50'] 이 됩니다.
let thisIsThatArray = inputs.slice(1) 을 통해서, inputs 에 입력받을 배열중 첫번 째 값인 1을 제거하였습니다. 즉 thisIsThatArray 에는 ['10','20','30','40','50'] 이 저장됩니다.
let firstNum 은 inputs.slice(1) 제거한 그 값 ,위의 예제서는 1이 저장됩니다.
let spliceArr = thisIsThatArray.splice(-firstNum) 을 설명하기전에 먼저 splice()의 첫번쨰 두번째 세번째 인자로 각 각 시작인덱스. 제거할 요소 수, 추가할 요소 를 입력 받습니다. 이뗴 첫번째 인자만 입력하고 두번째와 세번째 인자를 생략하면, 두번째 인자의 default로 최댓값이 적용이 되어서 첫번째 인자에서 지정한 인덱스보다 큰 인덱스들을 모두 제거합니다.
이때 spliceArr 는 제거하고 남은 배열이 아니라, 제거된 그 값들로 새로운 배열이 return 됩니다. 위의 예제에서는 thisIsThatArray 는 ['10','20','30','40','50'] 이고 -firstNum은 -1입니다. 즉 배열 뒤에서 첫번째 부터 값을 제거하고 그 제거된 값들을 spliceArr에 배열로 return 하게 됩니다. 또한 thisIsThatArray의 값은 제거된 그 값을 제외한 나머지입니다. 위의 예제에서 spliceArr의 값은 ['50']입니다. thisIsThatArray의 값은['10''20','30','40']입니다.. 만약 firstNum의 값이 2라면 -firstNum 은 -2가 되고, ['10','20','30','40','50'] 에서 뒤에서 두번째 값 즉 40 부터 시작해서 배열의 끝까지 모든 값을 제거하고 그 제거도니 값으로 spliceArr에 return 됨으로, spliceArr의 값은 ['40','50']입니다 이때 thisIsArray의 값은['10','20','30']입니다. 만약 firstNum이 3이라면, spliceArr의 값은 ['30','40','50']입니다. 다시 위의 예제로 돌아가서 firstNum 는 1이 였기 대문에 -firstNum은 -1이 되고 , spliceArr는 ['50']입니다. thIsArray의 값은 ['10','20','30','40']입니다.
그후 concat을 이용하여 spliceArr.concat(thisIsArray) 를 하면 ['50','10','20','30','40']이 나옵니다...
프로그래밍을 배운지 얼마되지 않은 완전 생초짜입니다. 무식하게 하나하나 해보다가 얻어걸린듯이 풀었습니다.. 설명을 잘 못해서 죄송합니다.
저는 가독성 좋은 파이썬에 도전합니당!ㅋㅋㅋ 그냥 회전수에 맞게 리스트 잘라서 양쪽에 붙이깅 (무한회전가능)
arr1 = input("입력: ").split()
vec, arr2 = int(arr1[0])%(len(arr1)-1), arr1[1:]
print(arr2[-vec: ] + arr2[:-vec])
def rotate(arr,i):
return arr[-i%len(arr):]+arr[:-i%len(arr)]
if __name__=="__main__":
inv = input().split()
print(rotate(inv[1:],int(inv[0])))
input_list = input().split(" ")
flag = int(input_list.pop(0))
if flag > 0:
extend = input_list[:-flag].copy()
del input_list[:-flag]
input_list.extend(extend)
else:
flag = abs(flag)
extend = input_list[:flag].copy()
del input_list[:flag]
input_list.extend(extend)
result = " ".join(input_list)
print(result)
using System;
using System.Collections.Generic;
using System.Linq;
namespace CD014
{
class Program
{
static void Main(string[] args)
{
var input = Console.ReadLine();
var result = Rotate(input);
foreach (var val in result) { Console.Write($"{val} "); }
Console.WriteLine();
}
static List<string> Rotate(string aString)
{ // 회전: Queue 클래스에서 dequeue -> enqueue (단, 문제에서의 방향과 반대임)
// parse input
var tmp = aString.Split().ToList();
int rotate = int.Parse(tmp[0]);
var q = new Queue<string>(tmp.GetRange(1, tmp.Count - 1));
// rotate List
int moveAmount = q.Count - rotate % q.Count;
for (int repeat = 1; repeat <= moveAmount; repeat++) { q.Enqueue(q.Dequeue()); }
return q.ToList();
}
}
}
// 리스트 회전
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 첫번째입력을 받음
String st = sc.nextLine(); // 두번째입력부터 받음
String[] str = st.split(" "); // 공백으로 분리
String[] str_2 = new String[str.length - 1]; // str[0]이 null 이기때문에 없애야함
for(int i = 0; i < str_2.length; i++)
{
str_2[i] = str[i+1];
}
System.out.print("Before: ");
for(String a : str_2)
System.out.printf(a + " ");
System.out.println();
getArr(n, str_2);
}
public static String[] getArr(int n, String[] str)
{
String[] newStr = new String[str.length];
if(n > 0)
{
for(int i = 0; i < str.length; i++)
{
newStr[(i + n) % str.length] = str[i];
}
}
else if(n < 0)
{
for(int i = 0; i < str.length; i++)
{
newStr[i] = str[(i - n) % str.length];
}
}
else
newStr = str;
System.out.print("After: ");
for(String a : newStr)
System.out.print(a + " ");
return newStr;
}
}
파이썬 3
data = input("입력: ").split()
list1, m = data[1:], int(data[0])
def list_move(list1, m):
m = m % len(list1)
return list1[-m:] + list1[:-m]
print("before:", list1, str(m))
print("after:", list_move(list1, m))
결과
before: ['A', 'B', 'C', 'D', 'E', 'F', 'G'] -2
after: ['C', 'D', 'E', 'F', 'G', 'A', 'B']
t = input().split()
(dir,l) = (int(t[0]) , t[1:])
if dir != 0:
p = dir % len(l)
l = l[-p:] + l[:len(l)-p]
print(l)
180731~ kakao 알고리즘 산책
import copy
num = raw_input().split()
count = int(num.pop(0))
print(len(num))
cpy_num = copy.copy(num)#이거 주의해야함 그냥 대입하면 해당 리스트의 주소를 가리키는 리스트가 생김
for i in range(len(num)):
print(i)
if i+count < len(num):
num[i] = cpy_num[i+count]
else:
num[i] = cpy_num[i+count-len(num)]
print(num)
def t(n, a):
r = list(a)
if n > len(a) or -n < -len(a):
n = n % len(a)
if n >= 0:
for i in range(len(a)):
r[i] = a[i-n]
else:
for i in range(len(a)):
if i-n >= len(a): r[i] = a[i-n-len(a)]
else: r[i] = a[i-n]
return r
a=input().split()
direction=int(a[0])
b1=a[1:len(a)]
b2=[]
for i in range(len(b1)):
b2.append(b1[(i+direction)%(len(b1))])
b3=" ".join(b2)
print(b3)
int num = 1;
int temp = num;
int[] arr = { 10, 20, 30, 40, 50 };
num %= arr.length;
System.out.println("입력 값 : " + temp + "\n");
for (int i = 0; i < arr.length; i++) {
if (num > 0) {
if (i < num) {
System.out.print(arr[i - num + arr.length] + " ");
} else {
System.out.print(arr[i - num] + " ");
}
} else {
if (i - num > arr.length - 1) {
System.out.print(arr[arr.length - (i - num)] + " ");
} else {
System.out.print(arr[(i - num)] + " ");
}
}
}
def in_list(inl):
num = inl[0]
l1 = inl[1:]
l1 = l1[-num:]+l1[:-num]
for i in range(len(l1)): print(l1[i]),
if __name__ == "__main__":
str1 = raw_input()
str1 = [int(x) for x in str1.split(" ")]
in_list(str1)
def rotation_list(s) :
S=s.split(" ")
rotation_rule = int(S.pop(0))
rotation_rule = rotation_rule % len(S)
rotation_list = S[-rotation_rule:]+S[:-rotation_rule]
return rotation_list
data = input("회전값과 데이터 입력:").split()
vector = int(data.pop(0))
if vector > 0 :
data = data[-vector:]+data[:-vector]
else:
data = data[-vector:]+data[:-vector]
print(data)
from collections import deque
item_list = input("입력: ").split(" ")
items = deque(item_list[1:])
items.rotate(int(item_list[0]))
print("출력:", " ".join(items))
raw = input().split()
data = raw[1:]
lr = int(raw[0])
if lr >= 0:
for cnt in range(lr):
right = data.pop()
data.insert(0, right)
else:
for cnt in range(-lr):
left = data.pop(0)
data.append(left)
print(" ".join(data))
#리스트에서 제일 앞의문자를 빼서 제일 뒤로 넣어주는 함수
# 왼쪽으로 한칸 이동하는 함수
def func1(list1):
char1 = list1.pop(0)
list1.append(char1)
#리스트에서 제일 뒤에문자를 빼서 제일 앞으로 넣어주는 함수
# 오른쪽으로 한칸 이동하는 함수
def func2(list2):
char2 = list2.pop()
list2.insert(0,char2)
def main():
sen_lis = input().split()
num = int(sen_lis.pop(0))
len_lis = len(sen_lis)
# 처음 숫자를 5로 나눈 나머지만큼 함수를 작동시킴
if num < 0:
for a in range(abs(num) % len_lis):
func1(sen_lis)
else:
for a in range((num) % len_lis):
func2(sen_lis)
print(' '.join(sen_lis))
main()
def solution(str)
arr = str.split
n = arr.shift.to_i
n >= 0 ? arr.unshift(*arr.pop(n.abs)).join(' ') : arr.push(*arr.shift(n.abs)).join(' ')
end
p solution('1 10 20 30 40 50')
p solution('4 가 나 다 라 마 바 사')
p solution('-2 A B C D E F G')
p solution('0 똘기 떵이 호치 새초미')
import java.util.Scanner;
public class KimSanghyeop
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String[] temp = sc.nextLine().split(" ");
String[] arr = new String[temp.length-1];
String[] res = new String[temp.length-1];
for(int f1=0;f1<arr.length;f1++)
{
arr[f1] = temp[f1+1];
}
int len = Integer.parseInt(temp[0]) %arr.length;
System.out.println("len : "+len);
for(int f1=0;f1<arr.length;f1++)
{
if(len >= 0)
{
res[(len +f1) % arr.length] = arr[f1];
}
else
{
res[(arr.length+len+f1) % arr.length] = arr[f1];
}
}
for(int f1=0;f1<arr.length;f1++)
{
System.out.print(res[f1]+ " ");
}
}
}
f='4 가 나 다 라 마 바 사'
d=f.split(' ')
key = int(d[0])
src=d[1:]
src=src[-key:]+src[0:-key]
print(' '.join(src))
message = input("회전값과 리스트 입력 : ").split()
x, list_ = int(message[0]), message[1:]
if x < 0 : x = len(list_) - abs(x)
print(' '.join(list_[len(list_) - (x%len(list_)):] + list_[0:len(list_) - (x%len(list_))]))
import sys
list = [x for x in sys.argv[2:]]
argv_size = len(sys.argv)-2
num = int(sys.argv[1]) % argv_size
newlist = list[-num:] + list[0:-num]
print(newlist)
instr = '1 10 20 30 40 50'
instr = '4 가 나 다 라 마 바 사'
instr = '-2 A B C D E F G'
instr = '0 똘기 떵이 호치 새초미'
inval = list(instr.split())
print(inval)
op = int(inval[0])
num_seq = inval[1:]
chunk1 = []
chunk2 = []
if op > 0:
chunk1 = num_seq[-1-(op-1):]
chunk2 = num_seq[:-1-(op-1)]
elif op < 0:
chunk1 = num_seq[abs(op):]
chunk2 = num_seq[:abs(op)]
else:
chunk1 = num_seq
for ck in chunk2:
chunk1.append(ck)
print(chunk1)
a = input().split()
num = int(a.pop(0)) % len(a)
result = []
for i in range(len(a)):
result.append(a[-num+i])
print(' '.join(result))
function List(input){
const splitted = input.split(' ')
const rotateNum = Number(splitted[0])
const list = splitted.filter((item,index)=>index>0)
const result = []
if(rotateNum>=0){
for(let i = list.length-rotateNum; i<list.length;i++){
result.push(list[i])
}
for(let i = 0; i<list.length-rotateNum;i++){
result.push(list[i])
}
}else{
for(let i = -rotateNum; i<list.length; i++){
result.push(list[i])
}
for(let i = 0; i<-rotateNum; i++){
result.push(list[i])
}
}
return result.join(' ')
}
def Turn_list(input):
list = input.split(' ')
time = int(list.pop(0))
for i in range(abs(time)):
if time >=0: a,b = 0, len(list)-1
else: a,b = len(list)-1, 0
list.insert(a, list.pop(b))
return list
print(Turn_list("-2 A B C D E F G"))
정석처럼..
rotation_num=0
list_in = input("입력: ").split(' ')
rotation_num = int(list_in[0])
del list_in[0]
for i in range(abs(rotation_num)):
if rotation_num>0:
list_in.insert(0,list_in.pop(-1))
elif rotation_num<0:
list_in.append(list_in.pop(0))
print(list_in)
namespace codingdojang__
{
class Program
{
static void Main(string[] args)
{
List("1 10 20 30 40 50");
List("4 가 나 다 라 마 바 사");
List("-2 A B C D E F G");
List("0 똘기 떵이 호치 새초미");
}
static void List(string input_list)
{
string[] list_temp = input_list.Split(' ');
int temp = 0;
List<string> list = new List<string> { };
for (int i = 1; i < list_temp.Length; i++)
{
list.Add(list_temp[i]);
}
for (int i = 1; i < list_temp.Length; i++)
{
list.Add(list_temp[i]);
}
if (int.Parse(list_temp[0]) >= 0)
{
for (int i = 0; i < list.Count / 2; i++)
{
Console.Write(list[((list.Count / 2 - (int.Parse(list_temp[0]) % list.Count)) + temp)]);
Console.Write(' ');
temp++;
}
Console.WriteLine(' ');
}
else if (int.Parse(list_temp[0]) < 0)
{
for (int i = 0; i < list.Count / 2; i++)
{
Console.Write(list[Math.Abs(int.Parse(list_temp[0])) + temp]);
Console.Write(' ');
temp++;
}
Console.WriteLine(' ');
}
}
}
}
def rotation(string):
lst = [i for i in string.split()]
k = int(lst[0])
lst = lst[1:]
if k == 0 :
answer = lst
else:
answer = lst[-k:] +lst[:-k]
return answer
#inputdata = '1 10 20 30 40 50'
#inputdata = '4 가 나 다 라 마 바 사'
inputdata = '-2 A B C D E F G'
#inputdata = '0 10 20 30 40 50'
inputList = inputdata.split()
c = int(inputList[0])
newList = []
for i in range(1,len(inputList)):
newList.append(inputList[i])
res = [0 for i in range(len(newList))]
if i >= 0:
for i in range(len(newList)):
res[(i+c)%(len(newList))] = newList[i]
elif i < 0:
c *= -1
for i in range(len(newList)):
res[(i+c)%len(newList)] = newList[i]
print(res)
``````{.python}
def rotate(n, L):
n = n % len(L)
print('출력:', ' '.join(L[-n:] + L[:-n]))
n, *L = input("입력: ").split()
rotate(int(n), L)
입력: 1 10 20 30 40 50
출력: 50 10 20 30 40
입력: 4 가 나 다 라 마 바 사
출력: 라 마 바 사 가 나 다
입력: -2 A B C D E F G
출력: C D E F G A B
입력: 0 똘기 떵이 호치 새초미
출력: 똘기 떵이 호치 새초미
나머지 연산이 핵심 그외애는 별거없습니다
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main()
{
deque<string> deq;
int N, K;
int time;
string str;
scanf("%d %d", &N, &K);
for(int i = 0 ; i < N ;i++)
{
cin >> str;
deq.push_back(str);
}
time= ((K % N) + N) % N;
for(int i = 0; i < time ; i++)
{
deq.push_front(deq[deq.size() - 1]);
deq.pop_back();
}
for(int i = 0; i < N; i++)
cout << deq[i] << ' ';
return 0;
}
inp=list(map(str,input().split()));jud=int(inp[0]);del inp[0];ans=''
if jud>=0:
jud%=len(inp)
for i in range(len(inp)):
if len(inp)-jud+i >=len(inp):
ans+=inp[i-jud]+' '
else:
ans+=inp[len(inp)-jud+i]+' '
else:
jud*=-1
jud%=len(inp)
for i in range(len(inp)):
if jud+i>=len(inp):
ans+=inp[jud+i-len(inp)]+' '
else:
ans+=inp[jud+i]+' '
print(ans)
아마 꽤 무식한 풀이이다라고 생각이 들읍니다. 역시 레벨1 처럼 문제가 한줄로 간결하게 끝나거나 하질을 않는군요. 더 정진하겠읍니다.
def Rrotate(lis):
temp = lis[len(lis)-1]
for i in reversed(range(2, len(lis))):
lis[i] = lis[i-1]
lis[1] = temp
return lis
def Lrotate(lis):
temp = lis[1]
for i in range(1, len(lis)-1):
lis[i] = lis[i+1]
lis[len(lis)-1] = temp
return lis
lis = input('>>>').split(' ')
for x in range(abs(int(lis[0]))):
if int(lis[0])>0: lis = Rrotate(lis)
elif int(lis[0])<0: lis = Lrotate(lis)
else: pass
print(lis[1:])
def solution(text):
t = text.split()
t[0] = int(t[0])
result = []
if t[0] < 0:
for i in range(abs(t[0])+1, len(t)):
result.append(t[i])
for i in range(1, abs(t[0])+1):
result.append(t[i])
else:
for i in range(len(t)-t[0], len(t)):
result.append(t[i])
for i in range(1, len(t)-t[0]):
result.append(t[i])
return result
print(solution('1 10 20 30 40 50'))
print(solution('4 가 나 다 라 마 바 사'))
print(solution('-2 A B C D E F G'))
print(solution('0 똘기 떵이 호치 새초미'))
python 3.7
r, *a = input("Input : ").split(' ')
r = int(r) % len(a)
print(' '.join(a[-r:] + a[:-r]))
a=input().split()#양수=맨뒤가 앞으로, 음수는 맨앞이 맨뒤로
c=int(a[0])
if int(a[0])<0:
a.pop(0)
for i in range(-c):
b=a.pop(0)
a.append(b)
elif int(a[0])>0:
a.pop(0)
for i in range(c):
b=a.pop()
a.insert(0,b)
print(a)
def circle(str_):
str_ = str_.split()
target = int(str_.pop(0))
str_ = str_[-target:] + str_[0:-target]
return str_
str_ = input("회전할 문자열을 입력하세요: ")
lst_ = circle(str_)
print(' '.join(lst_))
def cycle(a,n):
if int(a)!=0:
del n[0]
new=n[-int(a):]
del n[-int(a):]
new.extend(n)
else:
del n[0]
new=n
return new
n=list(input("입력: ").split(' '))
print(cycle(n[0],n))
PHP
$fn = function(string $str) : string {
$arr = explode(' ', $str);
$tmp = intval(array_shift($arr));
[$fn1, $fn2] = $tmp < 0 ? ['array_push', 'array_shift'] : ['array_unshift', 'array_pop'];
foreach (range(0, $tmp) as $k) {
if ($tmp === $k) break;
$fn1($arr, $fn2($arr));
}
$result = implode(' ', $arr);
return $result;
};
print_r($fn("1 10 20 30 40 50")); // 50 10 20 30 40
print_r($fn("4 가 나 다 라 마 바 사")); // 라 마 바 사 가 나 다
print_r($fn("-2 A B C D E F G")); // C D E F G A B
print_r($fn("0 똘기 떵이 호치 새초미")); // 똘기 떵이 호치 새초미
def rotateList(L):
answer = []
n = L[0]
answer.extend( L[-1*n:])
answer.extend(L[1:-1*n])
return answer
input_list = input().split()
key = int(input_list.pop(0))
def plus_swap(n, list_name):
length = int(len(list_name))
return print(list_name[length - n:] + list_name[:length - n])
def minus_swap(n, list_name):
return print(list_name[n:] + list_name[:n])
if key == 0:
print(input_list)
elif key < 0:
key = abs(key) % len(input_list)
minus_swap(abs(key), input_list)
elif key > 0:
key = key % len(input_list)
plus_swap(key, input_list)
IN = input().split()
turn = int(IN[0])
List = IN[1:]
cList = List
turn = turn%len(List)
if turn > 0: cList = cList[len(List)-turn:] + cList[:len(List)-turn]
else: cList = cList[turn:] + cList[:turn]
for i in cList: print(i, end=' ')
lis = list(input("enter the list that you want to rotate: ").split(" "))
rotation = abs(int(lis[0])) % len(lis[1:])
if rotation == 0:
lis = lis[1:]
elif int(lis[0]) >= 0:
lis = lis[-rotation:] + lis[1:-rotation]
else:
lis = lis[rotation+1:] + lis[1:rotation+1]
print(lis)
python 3,7,4
li = input('입력값을 넣으세요:').split(' ')
rotate = int(li.pop(0))
li_result = li[:]
for i in range(len(li)):
li_result[(i+rotate)%len(li)] = li[i]
print(" ".join(li_result))
def lotation(rot_data):
data = rot_data.split(" ")
result =""
if int(data[0]) > 0:
for i in range(len(data)-int(data[0]),len(data)):
result = result + " " + data[i]
for i in range(1,len(data)-int(data[0])):
result = result + " " + data[i]
elif int(data[0]) < 0 :
for i in range(abs(int(data[0]))+1,len(data)):
result = result + " " + data[i]
for i in range(1,abs(int(data[0]))+1):
result = result + " " + data[i]
else :
for i in range(1,len(data)):
result = result + " " + data[i]
print(result)
lotation("1 10 20 30 40 50")
lotation("4 가 나 다 라 마 바 사")
lotation("-2 A B C D E F G")
lotation("0 똘기 떵이 호치 새초미")
python3
def sort(ins):
a = ins.split(' ')
ans = []
if int(a[0]) > 0:
for i in a[-int(a[0]):][::-1]:
ans.append(i)
for i in a[1:-int(a[0])]:
ans.append(i)
else:
for i in a[-int(a[0])+1:]:
ans.append(i)
for i in a[1:][-int(a[0])-1::-1]:
ans.append(i)
answer = ' '.join(ans)
return answer
ins1 = '1 10 20 30 40 50'
ans1 = sort(ins1)
ins2 = '-2 10 20 30 40 50'
ans2 = sort(ins2)
print('ins1:', ans1)
print('ins2:', ans2)
'ins1:', '50 10 20 30 40'
'ins2:', '30 40 50 20 10'
import java.util.*;
public class 리스트회전 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] lines = scan.nextLine().split(" ");
ArrayList<String> list = new ArrayList<String>();
for(int i=0; i<lines.length; i++) {
list.add(lines[i]);
}
list.remove(0);
int count = Integer.parseInt(lines[0]);
Collections.rotate(list, count);
System.out.println(list);
}
}
//Collection.rotate(list, count)를 사용하면 짧고 편하네요..
class RotateList:
def __init__(self, raw):
self.raw_data = raw.split(' ')
print('입력 : ', self.raw_data)
self.rotate_direction = int(self.raw_data.pop(0))
self.temp = self.raw_data[:(-1 * self.rotate_direction)]
self.raw_data[:(-1 * self.rotate_direction)] = []
self.ans_data = []
def rotate(self):
self.ans_data = self.raw_data + self.temp
def ans_print(self):
print('출력 : ', self.ans_data)
Python 3.7
파이썬 3.6 입니다
def shift_list(s):
lst = s.split(" ")
spinner = int(lst.pop(0))
lst_spinned = lst[-spinner:] + lst[:-spinner]
return " ".join(lst_spinned)
print(shift_list("1 10 20 30 40 50"))
print(shift_list("4 가 나 다 라 마 바 사"))
print(shift_list("-2 A B C D E F G"))
print(shift_list("0 똘기 떵이 호치 새초미"))
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_LENGTH 1024
int main(void)
{
char* buf = NULL;
int length = MAX_LENGTH;
getline(&buf, &length, stdin);
getchar();
char* cuttedStr = strtok(buf, "\t");
char* temp[MAX_LENGTH] = {NULL, };
int i = 0;
while(cuttedStr != NULL) {
temp[i++] = cuttedStr;
cuttedStr = strtok(NULL, "\t");
}
int rotateCnt = atoi(temp[0]);
if(rotateCnt > 0) {
while(rotateCnt != 0) {
printf("%s\t", temp[i - rotateCnt]);
rotateCnt--;
}
for(int j = 1; j < i - atoi(temp[0]); j++) {
printf("%s\t", temp[j]);
}
} else if(rotateCnt < 0) {
for(int j = (abs(rotateCnt) + 1); j < i; j++) {
printf("%s\t", temp[j]);
}
for(int j = 1; j <= abs(rotateCnt); j++) {
printf("%s\t", temp[j]);
}
} else {
for(i = 1; temp[i] != NULL; i++) {
printf("%s\t", temp[i]);
}
}
putchar('\n');
return 0;
}
# 입력값을 받고, 회전수를 rot에 저장하고 list A만 남김
A = input("회전시킬 횟수와 리스트를 입력하세요. ex) 회전횟수 a b c d e... :", )
A = A.split(' ')
rot = int(A.pop(0))
# 회전수가 양수인 경우와 음수인 경우의 풀이가 다름(index가 다름)
# 회전수가 0인 경우 그대로 출력
if rot == 0:
print(A)
# 회전수가 양수인 경우 오른쪽 끝부터 하나씩 index 0 으로 이동해야 함
elif rot > 0:
for i in range(0,rot):
rotat = A.pop(-1)
A.insert(0,rotat)
# 회전수가 음수인 경우 왼쪽 끝부터 하나씩 마지막 인덱스 뒤에 추가해야 함.
else:
for i in range(0,abs(rot)):
rotat = A.pop(0)
A.append(rotat)
print(' '.join(A))
좀 직관적으로 짰는데, 훨신 간단한 코드가 많네요 배워갑니다.
l = input().split(" ")
a = int(l.pop(0))
if a > len(l):
a = len(l)/a
l = l[-a:] + l[:-a]
else:
a = a % len(l)
l = l[-a:] + l[:-a]
l=' '.join(l)
print (l)
리스트 크기를 넘기면 값이안나오는 코드가 많길래 리스트를 넘어가도 정상적인값이 출력되게 작성해봣습니다
파이썬입니다.
a = input('숫자와 문자열을 입력하시오: ')
result = a.split()
num = int(result.pop(0))
result = result[-num:] + result[:-num]
data=input("문자열을 입력하십시오: ").split(" ")
rdata=data[1:]
ndata=data[1:]*abs(int(data[0]))
if int(data[0])==0:
pass
else:
for i in range(len(data[1:])):
rdata[i]=ndata[i-int(data[0])]
print(" ".join(rdata))
a = input("input your list")
b = a.split()
num = int(b[0])
del b[0]
c = []
for i in range(len(b)):
if len(b)-num > len(b):
num = num + len(b)
c += [(b[i-num])]
else:
c += [(b[i - num])]
print(c)
s = input().strip().split(' ')
p = int(s.pop(0)) if p > 0: for i in range(p): s.insert(0,s.pop()) print(' '.join(s)) if p < 0: for i in range(abs(p)): s.append(s.pop(0)) print(' '.join(s)) if p == 0 : print(' '.join(s))
Nlist,check = list(input().split()),0
N = int(Nlist.pop(0))
Nfinish = list()
for i in range(len(Nlist)):
Nfinish.append(0)
for i in range(len(Nlist)):
try:
Nfinish[i+N] = Nlist[i]
except IndexError:
while(True):
try:
Nfinish[(i+N)-(len(Nfinish)*check)] = Nlist[i]
break
except IndexError:
check += 1
check = 0
print(Nfinish)
import java.util.Scanner;
import java.util.ArrayList;
public class ListSpin {
public static void main(String[] args) {
Scanner Sc = new Scanner(System.in);
ArrayList<String> Al = new ArrayList<>();
int input = 0; //회전 횟수 초기화
System.out.print("입력: ");
String str = Sc.nextLine(); //입력
String[] array = str.split(" "); //문자열 나누기
input = Integer.parseInt(array[0]);
int length = array.length -1;
for(int i =0; i<array.length; i++) { //ArrayList에 저장
Al.add(array[i]);
}
Al.remove(array[0]); //첫번째 인자 제거
if(input >0) { //우측 회전
for(int j = 0; j < input; j++) {
Al.add(0, array[length-j]);
Al.remove(length);
}
}
if(input <0) { //좌측 회전
for(int k = 0; k < -input; k++) {
Al.add(array[k+1]);
Al.remove(0);
}
}
for(String l : Al ) { //출력
System.out.print(l + " ");
}
Sc.close();
}
}
import math
a = input()
c = a.split(' ')
b = a.split(' ')
if int(b[0]) >= 0:
k=math.ceil(int(b[0])/int(len(b) -1))
b.extend(int(k) * b[1:])
print(b[int(b[0])+1 : len(c)+int(b[0])])
else:
k=(math.ceil(abs(int(b[0]))/int(len(b) -1)))
b.extend(int(k)*b[1:])
print(b)
print(b[abs(int(b[0]))+1 : len(c)+abs(int(b[0]))])
python 3.8
#-*- coding:utf-8 -*-
b=input().split() # 한글 출력을 위해 coding 삽입
a=int(b.pop(0)) # 회전수 a 와 문자열 b 정의
print(b[-a:] +b[:-a]) # 회전수가 pop된 후 문자열
mylist=input().split()
n=mylist[0]
n=int(n)
del mylist[0]
n=n%len(mylist)
for i in range(n, len(mylist)):
print(mylist[i])
for i in range(0, n):
print(mylist[i])
파이썬
def turning(lst):
rond=lst[0]
lst.pop(0)
for i in range(abs(int(rond))):
if int(rond) > 0: # 우회전
temp=lst.pop(-1)
lst=[temp]+lst
elif int(rond) < 0: # 좌회전
temp=lst.pop(0)
lst=lst+[temp]
elif int(rond) == 0: # 그대로
lst
return ' '.join(lst)
if __name__ == "__main__":
sent='2 10 20 30 40 50'
lst=sent.split(' ')
print(turning(lst))
# 40 50 10 20 30
파이썬 입니다
i = input('회전하는 양과 방향(양수 or 음수)를 정할 수를 먼저 쓰고 뒤에는 리스트에 들어갈 값(숫자 or 문자)를 작성하라 \n'
'(각 값의 구분은 공백으로 처리하라) :')
i = i.split()
j = []
def Check_Rotation_Direction(a):
if int(i[0]) > 0:
for iii in range(int(i[0])): # 회전하는 리스트 횟수
j.append(i[len(i)+iii-int(i[0])])
for ii in range(len(i)-1-int(i[0])): # 회전하지 않는 리스트 개수
j.append(i[ii + 1])
elif int(i[0]) < 0:
for ii in range(len(i)-1-int(i[0])): # 회전하지 않는 리스트 개수
j.append(i[ii + 1])
for iii in range(int(i[0])): # 회전하는 리스트 횟수
j.append(i[len(i)+iii-int(i[0])])
else:
j = i[1:]
print(' '.join(j))
Check_Rotation_Direction(i)
data=input("shift data>>>").split(' ')
spin=int(data.pop(0))
if spin<0:
spin=abs(spin)
for i in range(spin):data.append(data.pop(0))
elif spin>0:
spin=abs(spin)
for i in range(spin):data.insert(0, data.pop())
print(' '.join(data))
a='-4 가 나 다 라 마 바 사'
l=a.split(' ')
k=int(l[0])
del l[0]
if k>0 or k<0:
d=l[-k:]
del l[-k:]
l=d+l
else:
pass
f=' '.join(l)
print(f)
파이썬 입니다. 다음에는 문자 길이 이상 회전하는 방법도 도전해보겠습니다 ^^
import collections
def rotate_list(data):
d_list = collections.deque(data[1:])
d_list.rotate(int(data[0]))
return d_list
data = input("input: ").split()
print("output:", " ".join(rotate_list(data)))
while True: a = input('입력:').split() if int(a[0]) > 0: x = a[len(a) - int(a[0]):] y = a[:len(a) - int(a.pop(0))-1] r = x + y print(' '.join(r)) elif int(a[0]) < 0: x = a[abs(int(a[0]))+1:] y = a[:abs(int(a.pop(0)))] r = x + y print(' '.join(r)) elif int(a[0]) == 0: del a[0] print(' '.join(a))
의식의 흐름대로 작성해본뒤 다른분들의 작성하신 것을 보니 초라한 초보는 갈길이 먼것을 새삼느낍니다 그리고 저는 사이트 운영 또는 출제 의도와 상관없이 계속 긴코드를 적고있네요 같은 도구도 사람에 따라 다를 수 있음을 실감하고 있지만 포기않고 계속 해보겠습니다
# input_list = '1 10 20 30 40 50'.split()
# input_list = '-22 A B C D E F G'.split()
# input_list = '0 가 나 다 라 마 바 사'.split()
input_list = input('문자열을 공백으로 구분하여 입력해주세요 단, 첫번째는 숫자여야 합니다.: ').split()
# 입력된 리스트에서 정보부분과 자료 부분을 구분함
info_list = input_list[0:1]
data_list = input_list[1:len(input_list)]
# 정보부분의 값을 정수값으로 변환하고 회전 횟수를 생각함 (자료의 수와 동일한 회전은 변화가 없으므로 나머지 만큼 회전)
info_digit = int(input_list[0])
info_digit = info_digit % len(data_list)
# 문자열은 정보부분의 양수 또는 음수에 따라 오른쪽 또는 왼쪽으로 문자열을 선택후 위치를 바꿈
if info_digit > 0:
result_list = data_list[len(data_list)-info_digit:len(data_list)]+data_list[0:len(data_list)-info_digit]
elif info_digit < 0:
result_list = data_list[abs(info_digit):len(data_list)] + data_list[0:abs(info_digit)]
else:
result_list = data_list
# 문자열 형태로 출력
print(' '.join(result_list))
a=str(input('input data....')).split(' ')
b=int(a[0])
del a[0]
for i in range (0,abs(b)):
if b>0:
temp=a[len(a)-1]
del a[len(a)-1]
a.insert(0,temp)
elif b<0:
temp=a[0]
del a[0]
a.append(temp)
for i in range(len(a)):
print (a[i],'',end='')
cur=input("입력: ").split(" ")
num=int(cur[0])
cur.pop(0)
if num<0:
for i in range(-num):
cur.append(cur.pop(0))
else:
for i in range(num):
cur.insert(0,cur.pop(len(cur)-1))
print(cur)
li=input('입력 : ').split()
s=int(li[0])
if int(li[0])>0:
li1=li[-s:]+li[1:-s]
print(li1)
if int(li[0])<0:
li1=li[abs(s)+1:]+li[1:abs(s)+1]
print(li1)
a= input("숫자와 내용을 입력하세요.").split()
n = int(a[0])
del a[0]
for i in range(len(a)):
print( a[(len(a)-n+i)%len(a)] ,end=' ' )
최대한 간단하게 표현해봤는데 위의 for i in range(len(a)): 부분을 print문 안으로 집어넣을수 있나요? 해보려고 했는데 잘 안되서 .. 도움 부탁드립니다
input_string = input('input strings with spaces to separate. the first one defines the direction and amplitude: ').split()
start = int(input_string.pop(0))
if start < 0:
direct = -1
else:
direct= 1
print([input_string[-start+i*direct] for i in range(abs(start))] + [input_string[i*direct] for i in range(len(input_string)-abs(start))])
a=input()
a1=a.split(' ')
if int(a1[0])>0:
b=a1[-int(a[0]):]+a1[1:-int(a[0])]
print(' '.join(b))
else:
b=a1[abs(int(a1[0]))+1:]+a1[1:abs(int((a1[0])))+1]
print(' '.join(b))
파이썬3입니다.
stringList = str(input('type words with blank')).split()
print(stringList)
rNumber = stringList[0]
stringList.remove(rNumber)
rotatedList = stringList[-int(rNumber):] + stringList[:-int(rNumber)]
print(f'{int(rNumber)} rotated.')
print(rotatedList)
데이터 입력받을때 자꾸 공백 데이터 하나가 들어가져서 짜증나서 중간에 String k = scan.nextLine(); 추가했당 아마 이 풀이가 가장 멍청한 방법일듯
package java_example_listRotation;
import java.util.ArrayList;
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("숫자 입력 하시오");
int navi = scan.nextInt();
int a=0;
String k = scan.nextLine();
System.out.println("데이터 입력 하시오");
String data = scan.nextLine();
String[] datas = data.split(" ");
ArrayList<String> list = new ArrayList<String>();
if(navi>0)
{
navi = navi%datas.length;
for(int i=datas.length-navi;i<datas.length;i++)
list.add(datas[i]);
for(int i=0;i<datas.length-navi;i++)
list.add(datas[i]);
for(int i=0;i<list.size();i++)
System.out.print(list.get(a++)+" ");
}
else {
navi = Math.abs(navi%datas.length);
for(int i=navi;i<datas.length;i++)
list.add(datas[i]);
for(int i=0;i<navi;i++)
list.add(datas[i]);
for(int i=0;i<list.size();i++)
System.out.print(list.get(a++)+" ");
}
}
}
# s = '1 10 20 30 40 50'
s = '-2 A B C D E F G'
s = '0 똘기 떵이 호치 새초미'
s = s.split(' ')
n = int(s[0])
l = s[1:]
print(' '.join(l[-n:] + l[:-n]))
while True:
a = input("리스트 회전: ")
lista= a.split()
if a == '그만':
break
def rotate_list(list_name):
listb=list_name[1:len(list_name)]
for i in range(1, int(list_name[0])+1):
listb.insert(0,listb[-(i)])
for i in range(int(list_name[0])):
listb.pop()
print(listb)
def rotate_list2(list_name):
listb=list_name[1:len(list_name)]
for i in range(abs(int(list_name[0]))):
listb.insert(len(listb), listb[0])
listb.pop(0)
print(listb)
if int(lista[0])>0:
rotate_list(lista)
elif int(lista[0])<0:
rotate_list2(lista)
else:
print(lista[1:len(lista)])
while구문을 넣은 이유는 입출력 예시를 여러 번 확인하기 위해서 넣었습니다.
package test;
import java.util.*;
public class Test{
public static void main(String[] args) {
String temp; int i;
Scanner sc = new Scanner(System.in);
sc.close();
String input = sc.nextLine();
String[] arr = input.split(" ");
int count = Integer.parseInt(arr[0]);
ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
list.remove(0);
if(count > 0) {
for(i = 0; i<count; i++) {
temp = list.get(list.size()-1);
list.add(0,temp);
list.remove(list.size()-1);
}
}
else if(count < 0) {
for(i = 0; i>count; i--) {
temp = list.get(0);
list.add(temp);
list.remove(0);
}
}
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next()+" ");
}
}
}
파이썬 3으로 만들었습니다.
def list_rotate(list):
seq=list.pop(0)
first=list[-seq::]
second=list[:-seq:]
return(first+second)
a=list_rotate([0,'똘기','떵이','호치','새초미'])
print(a)
Input = input()
def lstRotate(given_str) :
lst = given_str.split(" ")
key = int(lst[0])
if key > 0:
lst1 = lst[-key:]
lst2 = lst[1:-key]
ans = lst1 + lst2
return ' '.join(ans)
else :
lst1 = lst[-key+1:]
lst2 = lst[1:-key+1]
ans = lst1 +lst2
return ' '.join(ans)
print lstRotate(Input)
def f(s): t = s.split() go = int(t[0]) src = t[1:] result = [None] * len(src) for i in range(len(src)): result[(i+go) %len(src)] = src[i] return " ".join(result)
print f("1 10 20 30 40 50") print f("-2 A B C D E F G")
temp = input().split(" ")
l1 = temp[1:]
rotate = int(temp[0]) % len(l1)
l1 = [l1[-rotate + i] if rotate >= 0 else l1[-(len(l1) + rotate) + i] for i in range(len(l1))]
print(" ".join(l1))
def rotate(text):
temp_a = int(text.split()[0])
temp_b = text.split()[1::]
result = []
for i in range(len(temp_b)):
try:
result.append(temp_b[i-temp_a])
except:
i = i - len(temp_b)
result.append(temp_b[i-temp_a])
print("".join(result))
rotate('4 가 나 다 라 마 바 사')
def list_turn(list):
num=list[0]
if num<0:
while num!=0:
list.append(list[1])
del list[1]
num+=1
return list[1:]
else:
while num!=0:
list.insert(1,list[-1])
list.pop()
num-=1
return list[1:]
print(list_turn([1,10,20,30,40,50]))
이거 가지고 생각보다 고민을 많이했는데... 어쩔 수 없이 그냥 조건을 제 멋대로 완화시켜서 코딩했습니다...
첫 인자로서 List의 갯수를 입력했고 나머지는 같습니다.
또한 int형밖에 안되고 char, char*까지 하려면... template class 먼가 써야지 제 머리로 될거 같아서 그냥 포기했습니다.
#include <iostream>
using namespace std;
int *msg;
int main() {
int cnt;
cin >> cnt;
msg = new int[cnt];
int rot;
cin >> rot;
for(int i =0;i<cnt;i++) {
cin >> msg[i];
}
int tmp;
if (rot>0) {
while(rot--) {
tmp = msg[cnt-1];
for(int i =cnt-2;i>=0;i--) {
msg[i+1]=msg[i];
}
msg[0]=tmp;
}
}
else {
rot = -rot;
while(rot--) {
tmp = msg[0];
for(int i =0;i<cnt-1;i++) {
msg[i]=msg[i+1];
}
msg[cnt-1]=tmp;
}
}
for(int i =0;i<cnt;i++) {
cout << msg[i] << " ";
}
}
arr = input().split(" ")
n = int(arr[0])
arr = arr[1:]
carr = arr[:]
if(n > len(arr)):n= n % 5
if(n > 0):
for i in range(0, n):
for j in range(0,len(arr)):
if(j == len(arr) - 1):
carr[0] = arr[j]
else:
carr[j+1] = arr[j]
arr = carr[:]
elif(n == 0):pass
else:
for i in range(0, abs(n)):
for j in range(0,len(arr)):
if(j == 0):
carr[len(arr) - 1] = arr[j]
else:
carr[j-1] = arr[j]
arr = carr[:]
print(arr)
def array(data):
x = [(lambda x: int(x))(n) for n in data.split()]
x_ = x[1:]
num = x[0]%len(x_)
if num==0:
return x_
else:
return x_[-num:]+x_[:len(x_)-num]
def rotate(num, str):
str = str.split(' ')
str = str[-num:] + str[0:-num]
print(" ".join(str))
rotate(1, '10 20 30 40 50')
rotate(4, '가 나 다 라 마 바 사')
rotate(-2, 'A B C D E F G')
rotate(0, '똘기 떵이 호치 새초미')
string_input = input("입력 : ").split()
rotation_value = int(string_input.pop(0)) % len(string_input)
for i in range(rotation_value):
tempt = string_input[i]
string_input[i] = string_input[-rotation_value + i]
string_input.insert(i+1, tempt)
del string_input[-rotation_value + i]
print(string_input)
x=input('입력')
xlist=x.split(' ')
result=[]
if int(xlist[0]) > 0 :
if xlist[0] == '1':
result.append(xlist[-1])
else:
for i in range(-int(xlist[0]), 0):
result.append(xlist[i])
for n in range(1,len(xlist)-int(xlist[0])):
result.append(xlist[n])
if int(xlist[0]) == 0 :
for i in range(1, len(xlist)):
result.append(xlist[i])
if int(xlist[0]) < 0 :
if xlist[0] == '-1':
for i in range(2, len(xlist)):
result.append(xlist[i])
result.append(xlist[1])
else:
for i in range(abs(int(xlist[0]))+1, len(xlist)):
result.append(xlist[i])
for n in range(1, abs(int(xlist[0]))+1):
result.append(xlist[n])
print(' '.join(result))
def makeAns(_str):
list1 = _str.split(" ")
tmp1 = int(list1.pop(0))
list2 = list1[tmp1:len(list1)] + list1[0:tmp1]
print(" ".join(list2))
makeAns("5 가 나 다 라 마 바 사 아")
makeAns("2 A B C D E F G H")
결과
바 사 아 가 나 다 라 마
C D E F G H A B
# collections.deque 를 사용하여 생각의 흐름대로 작성해 보았습니다.
import collections
def list_rotate(list_a,rot_no):
deq = collections.deque(list_a)
deq.rotate(rot_no)
return list(deq)
inputs = input().split()
rot_no = int(inputs[0])
a = list_rotate(inputs[1:],rot_no)
print("Output :", " ".join(a))
a = input('공백구분 :')
l = a.split()
a_l = int(l.pop(0))
L = []
if a_l <= 0 :
L.extend(l[abs(a_l):])
L.extend(l[:abs(a_l)])
else :
L.extend(l)
L.extend(l[:len(l)-a_l])
del L[:len(l)-a_l]
print(L)
a = input("입력: ").split(' ')
i = int(a[0])
a[0] = i
f = len(a)
if a[0] > 0:
print("출력: ",a[i:f]+a[1:i-1])
elif a[0] < 0:
print("출력: ",a[-i+1:f]+a[1:-i+1])
elif a[0] == 0:
print("출력: ",a[1:f])
머리가 바쁘면 손발이 고생한다는데 deque 모듈과 pop을 사용할 생각을 못했네요 ㅜㅠ
#codingdojing_last rotation
#terminal에서 바로 돌리는 방식
import sys
rotation_type = sys.argv[1]
numbers = sys.argv[2:]
i = int(rotation_type) % len(numbers)
new_output = numbers[-i:] + numbers[:-i]
print(' '.join(new_output))
public class Rotation_List {
public static void main(String[] args) {
List<String> input = Arrays.asList(new Scanner(System.in).nextLine().split(" "));
LinkedList<String> amount = new LinkedList<>(ss.subList(1, ss.size()));
Integer r = Integer.valueOf(input.get(0));
System.out.println(r);
while (r > 0) {
amount.push(amount.pollLast());
r--;
}
while (r < 0) {
amount.addLast(amount.pollFirst());
r++;
}
System.out.println(amount);
}
}
x=input().split()
y=int(x.pop(0)) % len(x)
if y >=0:
print(' '.join([x[i] for i in range(-y,len(x)-y,1)]))
else:
print(' '.join([x[i] for i in range(-(len(x)+y),-y,1)]))
def circlelist(input):
inputlist=input.split(' ')[1:]
step=int(input.split(' ')[0])
outputlist=[]
for i in range(-step,-step+len(inputlist)):
outputlist.append(inputlist[i%len(inputlist)])
return " ".join(outputlist)
inp=input("input: ").split()
n=int(inp[0])
print(' '.join(inp[-n:]+inp[1:-n])) if n>0 else print(' '.join(inp[-n+1:]+inp[1:-n+1]))
마음에 들게 짜여진 것 같네요
a= list(input().split(' '))
b=int(a[0])
del a[0]
index=0
if b>0:
for i in range(b):
a.insert(0, a[-1])
del a[-1]
elif b<0:
for i in range(-b):
a.append(a[index])
del a[index]
print(' '.join(a))
insert처음 썼는데 넘 유용하군
static void rotation(String x) {
String[] str = new String[x.split(" ").length];
str = x.split(" ");
int num = str.length, y = 0;
System.out.println(Arrays.toString(x.split(" ")));
if (Integer.parseInt(str[0]) > 0) {
y = num - Integer.parseInt(str[0]);
} else {
y = num - Integer.parseInt(str[0]) + 1;
}
for (int i = 0; i < str.length - 1; i++) {
if (y % str.length == 0) {
y += 1;
System.out.print(str[y % str.length] + " ");
} else
System.out.print(str[y % str.length] + " ");
++y;
}
System.out.println();
}
public static void main(String[] args) {
rotation("1 10 20 30 40 50");
rotation("4 가 나 다 라 마 바 사");
rotation("-2 A B C D E F G");
rotation("0 똘기 떵이 호치 새초미");
}
var input = '-10 가 나 다 라 마 바 사';
var startNum = input.split(" ")[0];
var inputArr = new Array();
for(var i = 1; i < input.split(" ").length; i++) {
inputArr.push(input.split(" ")[i]);
}
startNum = startNum < 0 ? startNum * - 1 : inputArr.length - startNum;
startNum = startNum < 0 ? inputArr.length - (startNum * - 1) : startNum;
startNum = startNum > inputArr.length ? startNum - inputArr.length : startNum;
var result = new Array();
for(var i = startNum; i < inputArr.length; i++) {
result.push(inputArr[i]);
}
for(var i = 0; i < startNum; i++) {
result.push(inputArr[i]);
}
자바스크립트로 작성하였습니다.
자바스크립트의 배열에 관한 메서드들을 오랜만에 다시보니 헤깔리기도 하고 다시금 공부가 되기도 하네요.
const cycle = (string) => {
let firstArr = string.split(" ");
let startNumber = firstArr[0]
firstArr = firstArr.slice(1);
let resultArr;
if(startNumber >= 0) {
resultArr = firstArr.splice(-startNumber)
resultArr = resultArr.concat(firstArr)
} else {
startNumber = -Number(startNumber)
resultArr = firstArr.splice(0, startNumber)
resultArr = firstArr.concat(resultArr)
}
console.log(resultArr)
}
cycle("1 10 20 30 40 50");
cycle("4 가 나 다 라 마 바 사");
cycle("-2 A B C D E F G");
cycle("0 똘기 떵이 호치 새초미")
a= input("입력해주세요(원소는 띄어쓰기로 구분)").split(" ")
n = int(a[0])
a.remove(a[0])
b =[]
for i in range(len(a)) :
if n > 0 :
k = n%len(a)
b.append(a[i-k])
elif n < 0 :
k = -abs(n)%len(a)
b.append(a[i-k])
else :
b= a
print(b)
from collections import deque as dq
user = dq(input('Input your list : ').split())
temp = int(user[0])
user.rotate(int(user[0]))
user.remove(user[temp])
print(*user)
input_list = input("입력 : ")
input_list = input_list.split()
rotation = int(input_list.pop(0)) % len(input_list)
if rotation < 0 : rotation = -(len(input_list)+rotation)
result_list = []
for i in range(0,len(input_list)):
result_list.append(input_list[i-rotation])
print("출력 : ",result_list)
text = input('회전수와 문자열을 입력하세요 : ').split()
# 회전수가 문자열의 길이를 초과하면 오류가 발생하는데, 문자열 길이 만큼 순환한다는 점에 착안하여 나누기를 해주었음.
cycle = int(text.pop(0)) % len(text)
answer = [] # 답을 입력할 배열 정의
# 회전을 하게 되면 마이너스 회전 수 부터 배열이 시작하게 되므로 range(-cycle, len(text)-cycle)로 반복을 하게 하였음.
for i in range(-cycle, len(text)-cycle):
answer.append(text[i]) # 배열 answer에 차례대로 값을 추가해줌.
print(' '.join(answer))
text = input('회전수와 문자열을 입력하세요 : ').split() # 회전수와 문자열을 입력받는다
answer = [] # 출력 값을 입력할 리스트 answer을 정의한다.
for i in range(len(text)): # 입력받은 text의 길이만큼 반복문을 실행한다
if i == 0: # 첫번째 값은 회전 수이다.
try:
cycle = int(text[i]) # 회전 수를 cycle 변수에 입력한다.
except ValueError:
print('첫번째 값은 정수를 입력하여야 합니다.') # try except문으로 정수가 아닌 값을 입력 시 오류메세지를 출력한다.
break
else: # 두번째 값부터는 리스트 answer에 값을 append 해준다.
answer.append(text[i])
if cycle > 0: # 회전 수가 양수인 경우
while cycle > 0: # 회전수가 0보다 큰 경우에 반복한다.
answer.insert(0, answer[len(answer) - 1]) # 리스트 answer의 가장 마지막 값을 0번째 자리에 insert로 넣어주고,
answer.pop(len(answer) - 1) # 리스트 answer의 가장 마지막 값을 pop로 삭제한다.
cycle -= 1 # 그리고 cycle 값을 -1 해준다.
elif cycle < 0: # 회전 수가 음수인 경우
while cycle < 0: # 회전수가 0보다 작은 경우에 반복한다.
answer.append(answer[0]) # 리스트 answer의 가장 첫번째 값을 자기자신에게 append로 추가해주고,
answer.pop(0) # 리스트 answer의 가장 첫번째 값을 pop로 삭제한다.
cycle += 1 # 그리고 cycle 값을 +1 해준다.
print('결과 : ' + ' '.join(answer)) # 결과 출력
// Rust
// 벡터 어디를 잘라낼지만 계산하면 됩니다
fn list_rotation() {
// let mut input_ = String::new();
// std::io::stdin().read_line(&mut input_).expect("input error"); // /n포함
// let mut input_ = input_.trim().split_whitespace();
let input_ = ["1 10 20 30 40 50", "4 가 나 다 라 마 바 사", "-2 A B C D E F G"];
for input in input_ {
let mut iter = input.split_whitespace();
let dir = iter.next().unwrap().parse::<i32>().unwrap();
let mut arr: Vec<&str> = iter.collect();
let mut idx = arr.len() as i32 - dir;
idx %= arr.len() as i32;
let mut front = arr.split_off(idx as usize);
front.extend(arr);
println!("\n{:?}", front);
}
}
def rotator(a):
a = a.split()
rotate = int(a.pop(0))
for i in range(len(a) - rotate):
a_temp = str(a.pop(0))
a.append(a_temp)
a_output = ' '.join(a)
print('출력:',a_output)
inputstr = ['1 10 20 30 40 50','4 가 나 다 라 마 바 사','-2 A B C D E F G','0 똘기 떵이 호치 새초미']
for i in inputstr:
print('입력:',i)
rotator(i)
참고한 코드입니다 .```{.java} package org.javaturotials.ex; import java.util.*;
public class test { public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(" ");
String[] arr2 = new String[arr.length-1];
int a = Integer.parseInt(arr[0]);
for(int i=0; i<arr2.length; i++) {
arr2[i] = arr[i+1];
}
a = arr2.length - a;
for(int i=0; i<arr2.length; i++) {
System.out.printf(arr2[( i + a ) % arr2.length] + " ");}
}
}
```
user_input = input('입력하시오: ').split()
def change_list(data):
n = int(data.pop(0))
result = data[-n:] + data[:-n]
return " ".join(result)
print(change_list(user_input))
# deque 모듈 사용 deque.rotate(숫자) 숫자만큼 회전 양수: 시계방향 음수: 반시계방향
from collections import deque
user_input = deque(input("입력하시오: ").split(" "))
def cycle_list(data):
n = int(data.popleft())
n = n % len(data)
data.rotate(n)
return "Out put : {}".format(" ".join(data))
print(cycle_list(user_input))
두 가지 방법으로 풀어보았습니다.
seq='2 1 2 3 4 5 6'
seq_l=seq.split(' ')
rot_num=int(seq_l.pop(0))%len(seq_l) # %를 이용하여 수가 회전수가 높아지면 결과가 다르게 나오는 것 방지.
#리스트를 둘로 나눠 반대로 붙이는 방법.
print(seq_l)
new_seq=seq_l[len(seq_l)-rot_num:]+seq_l[:len(seq_l)-rot_num]
print(''.join(new_seq))
seq='-2 1 2 3 4 5 6'
seq_l=seq.split(' ')
rot_num=int(seq_l.pop(0))%len(seq_l) # %를 이용하여 수가 회전수가 높아지면 결과가 다르게 나오는 것 방지.
#마지막 요소를 처음으로 넣는 것을 반복하는 방법.
for times in range(0,rot_num):
seq_l.insert(0,seq_l.pop())
print(''.join(seq_l))
sl = list(input("회전수와 문자열 입력: ").split())
sp = int(sl[0])
del sl[0]
sp = sp%len(sl)
sl = sl[-sp:]+sl[:-sp]
f=" ".join(sl)
print(f)
public class RotationList2 {
public static void main(String[] args) {
LinkedList list = new LinkedList<>();
Scanner sc = new Scanner(System.in);
String[] arr = sc.nextLine().split(" ");
int input = Integer.parseInt(arr[0]);
for(int i=1;i<arr.length;i++)
list.add(arr[i]);
Collections.rotate(list, input); // list의 요소를 input만큼 이동시키는 메서드
System.out.println(list);
}
}
def rotationList():
# 인풋값을 리스트로 저장
in_list = list(input().split())
# 리스트의 첫 번째 값을 (리스트 갯수-1)로 나눈 나머지 값을 회전값으로 저장
rotationNum = int(in_list[0])%(len(in_list)-1)
# 회전값이 0인 경우 첫 값을 제외하고 그대로 출력
if rotationNum == 0:
[print(x, end=' ') for x in in_list[1:]]
# 양의 값 또는 음의 값인 경우 출력
else:
[print(x, end=' ') for x in in_list[-rotationNum:]]
[print(x, end=' ') for x in in_list[1:-rotationNum]]
arr = list(map(str, input().split()))
a = arr[0]
del arr[0]
b =''
if int(a) >= 0:
for i in range(-int(a), len(arr) - int(a)):
b += arr[i] + ' '
print(b)
else:
for i in range( -int(a), len(arr)):
b += arr[i] + ' '
for i in range(0, -int(a)):
b += arr[i] + ' '
print(b)
a = input("회전량과 리스트를 입력하시오.(스페이스바로 구분)\n")
a = a.split()
from collections import deque
q = deque(a[1:])
q.rotate(int(a[0]))
for i in q:
print(i,end=' ')
a=input().split(" ")
if abs(int(a[0]))>=len(a):
print('유효한 첫번째 값 입력')
exit
elif int(a[0])==0:
print(a[1:])
elif int(a[0])>0:
b= (a[-int(a[0]):])
b.reverse()
del a[-int(a[0]):]
del a[0]
for i in range(len(b)):
a.insert(0,b[i])
print(a)
elif int(a[0])<0:
b = a[1:-int(a[0])+1]
del a[1:-int(a[0])+1]
del a[0]
for i in range(len(b)):
a.append(b[i])
print(a)
원래 리스트를 두 부분으로 쪼개 재조합하면 회전한 리스트가 되는 것을 이용하였습니다. python 3.10입니다.
arr = input().split()
turn = int(arr[0])
arr = arr[1:]
arr = arr[-turn:] + arr[:-turn]
for data in arr: print(data, end=' ')
실행 결과입니다.
1 10 20 30 40 50
50 10 20 30 40
-2 a b c d e f g
c d e f g a b
0 a b c d
a b c d
코드의 특성상 맨 뒤에 공백 문자가 생기게 됩니다.
# 014 : 리스트 회전
words = input().split()
direct_num = int(words[0])
words = words[1:]
for i in range(len(words)):
print(words[(i-direct_num) % len(words)], end=' ')
print()
python 3.11 버전입니다.
a = input()
def rotate(n):
n = n.split()
x = int(n[0])
del n[0]
List = []
if x > 0:
for i in range(0,len(n)):
List.append(n[-x+i])
return List
for i in range(0,len(rotate(a))):
print(rotate(a)[i], end = " ")
Python. 사실상 풀었다기보다는 해답 보고 재구현한 쪽에 가깝네요. 회전을 어떻게 구현해야 할지 전혀 감이 안 왔는데, 많이 배웁니다.
list_1 = input("공백으로 구분되는 문자열 입력(첫 값은 회전 방향 및 양) : ")
splited_list = list_1.split(' ') #하나의 문자열을 공백으로 구분해 리스트화
rotate_number = int(splited_list.pop(0)) #리스트의 첫 요소를 회전 수로 정하고 리스트에서 제거
rotated_list = splited_list[-rotate_number:] + splited_list[0:-rotate_number]
print(" ".join(rotated_list))
input_value = input()
result = input_value.split(" ")
spin = int(result[0])
del result[0]
if spin > 0 :
list1 = result[-spin:]
del result[-spin:]
print(" ".join(list1 + result))
else :
list1 = result[-spin:]
del result[-spin:]
print(" ".join(list1 + result))
파이썬입니다.
L1=input().split()
n=int(L1[0]); L2=L1[1:]; L3=[]
if n>=0:
L2.reverse()
for i in range(n):
L3.append(L2[n-1-i])
L2.reverse()
for i in range(len(L2)-n):
L3.append(L2[i])
else:
n*=-1
for i in range(len(L2)-n-1):
L3.append(L2[n+i])
for i in range(n):
L3.append(L2[i])
for i in range(len(L3)):
print(L3[i], end=' ')
짱이네요
a = input("input numbers: ")
b = a.split(' ')
print(b)
rot_n = int(b.pop(0))
print(rot_n)
print(b)
length = len(b)
print(length)
result = ['0'] * length
print(result)
rot_n = rot_n % length
for idx, i in enumerate(b):
if idx + rot_n < length :
result[idx + rot_n] = b[idx]
else:
result[idx + rot_n - length] = b[idx]
print(result)
array1=input().split()
numb1=int(array1.pop(0))
currentArray=''
if numb1<0:
for i in range(abs(numb1)):
array1.append(array1.pop(0))
elif numb1>0:
for i in range (numb1):
array1.insert(0,array1.pop(-1))
print(array1)
lst = list(input.split())
first = int(lst.pop(0))
for i in range(0, abs(first)):
if first >= 0:
lst.insert(0, lst.pop(-1))
else:
lst.append(lst.pop(0))
print(lst)
input_val = input("입력 : ")
val_list = input_val.split(' ')
max_len = len(val_list) - 1
arrow = int(val_list.pop(0))
if arrow > 0: #정방향
for i in range(arrow):
val_list.insert(0, val_list.pop())
elif arrow < 0:
arrow *= -1
for i in range(arrow):
val_list.insert(max_len-1, val_list.pop(0))
print(val_list)
def rotateListByCount(count, targetList):
itemCount = len(targetList)
return (targetList[-int(count) % itemCount:] + targetList[:-int(count) % itemCount])
def rotate():
testList = list(input('Input: ').split())
count = testList[0]
print(rotateListByCount(int(count), testList[1:]))
print(rotateListByCount(-4, ['a','b','c']))
print(rotateListByCount(-3, ['a','b','c']))
print(rotateListByCount(-2, ['a','b','c']))
print(rotateListByCount(-1, ['a','b','c']))
print(rotateListByCount(0, ['a','b','c']))
print(rotateListByCount(1, ['a','b','c']))
print(rotateListByCount(2, ['a','b','c']))
print(rotateListByCount(3, ['a','b','c']))
print(rotateListByCount(4, ['a','b','c']))
def rotate():
usr = input('입력: ').split()
n = int(usr.pop(0))
if n > 0:
for i in range(n):
x = usr.pop()
usr.insert(0, x)
elif n < 0:
for i in range(-n):
x = usr.pop(0)
usr.append(x)
print(usr)
rotate()
inpt = input().split()
a = int(inpt.pop(0))
for _ in range(abs(a)):
if a > 0:
inpt.insert(0, inpt.pop())
elif a < 0:
inpt.append(inpt.pop(0))
for i in inpt:
print(i, end=' ')
data = input(">").split()
result = []
num = int(data[0])
del data[0]
def rotate(li,n)
leng = len(li)
n = n % leng
if n == 0:
return li
else:
return li[-n:] + li[:-n]
result = rotate(data,num)
print(result)
A = input().split(' ')
B = A[1:]
B_len = len(B)
C = []
rotation = (int(A[0]) % B_len + B_len) % B_len
for i in range(rotation):
C.append(B[B_len - rotation + i])
for i in range(B_len - rotation):
C.append(B[i])
print(C)
inp = input('>>>').split()
rn = int(inp.pop(0))
l = len(inp)
print([ inp[(l+i-rn)%l] for i in range(l)])
list_data=input().split()
print(list_data)
rotate=int(list_data.pop(0))
print('rotate:',rotate)
print(list_data)
if rotate>0:
while rotate>0:
list_data.insert(0,list_data.pop())
rotate-=1
elif rotate<0:
rotate=-rotate
while rotate>0:
list_data.insert(len(list_data),list_data.pop(0))
rotate-=1
else:
pass
print(list_data)
JAVA입니다.
package 리스트_회전;
import java.util.ArrayList;
import java.util.List;
public class RotateList {
public static void main(String[] args) {
// TODO Auto-generated method stub
String input = "1 10 20 30 40 50";
String[] strs = input.split(" ");
int num = Integer.parseInt(strs[0]);
List<String> list = new ArrayList<String>();
for (int i = 1; i < strs.length; i++) {
list.add(strs[i]);
}
list = rotate(list, num);
for (String string : list) {
System.out.print(string + " ");
}
}
public static List<String> rotate(List<String> list, int num) {
if(num == 0) {
return list;
}
boolean sign = num > 0; //양수: true, 음수: false
String temp = list.get((sign) ? (list.size() - 1) : 0);
list.remove(temp);
list.add((sign) ? 0 : (list.size()), temp);
num = num + ((sign) ? -1 : 1); //양수면 1 감소, 음수면 1 증가
return rotate(list, num);
}
}