첫 줄에 정수의 개수 n과 돌릴 횟수 k, 둘째 줄에 정수 n개가 주어진다. 목록을 오른쪽으로 k칸 돌린 결과를 빈칸 하나로 띄워 한 줄에 출력하라. 한 칸 돌리면 맨 끝의 값이 맨 앞으로 온다(1 2 3 4 5를 2칸 돌리면 4 5 1 2 3). k는 n보다 클 수 있고, n칸 돌리면 처음과 같아진다.
입력
1 ≤ n ≤ 100, 0 ≤ k ≤ 1,000,000,000, -1000 ≤ 각 정수 ≤ 1000
출력
돌린 목록 한 줄
예시 1 · stdin
5 2
1 2 3 4 5
stdout
4 5 1 2 3
예시 2 · stdin
5 7
1 2 3 4 5
stdout
4 5 1 2 3
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
먼저 k %= n으로 줄여요. 한 칸씩 k번 돌리면 k = 10억에서 너무 느리고, 줄이지 않고 Python a[-k:] + a[:-k]를 쓰면 k > n일 때 a[-k:]가 목록 전체가 되어 그대로 나와요. 자르기: Python a[n-k:] + a[:n-k], JS a.slice(n - k), C# a[(n-k)..], C++ std::rotate, 크레이콘 a.부분목록(n - k, k). 자리 계산 (i - k + n) % n에서 + n을 빼면 C·C++·Java·C#·JS는 -1 % 5가 -1이라 배열 밖을 읽어요(Python만 4).
Pythonmain.py · 4 줄
n, k = map(int, input().split())a = input().split()k %= nprint(" ".join(a[n - k:] + a[:n - k]))
JavaScriptmain.js · 5 줄
const [first, second] = require("fs").readFileSync(0, "utf8").split("\n");const [n, k0] = first.trim().split(/\s+/).map(Number);const a = second.trim().split(/\s+/);const k = k0 % n;console.log([...a.slice(n - k), ...a.slice(0, n - k)].join(" "));
import java.util.Scanner;import java.util.StringJoiner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt() % n; int[] a = new int[n]; for (int i = 0; i < n; i++) a[i] = sc.nextInt(); StringJoiner out = new StringJoiner(" "); for (int i = 0; i < n; i++) out.add(String.valueOf(a[(i - k + n) % n])); System.out.println(out); }}
C#Main.cs · 13 줄
using System;using System.Linq;class Program{ static void Main() { int[] nk = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); int n = nk[0], k = nk[1] % n; string[] a = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(string.Join(" ", a[(n - k)..].Concat(a[..(n - k)]))); }}
C++main.cpp · 13 줄
#include <algorithm>#include <iostream>#include <vector>int main() { int n, k; std::cin >> n >> k; std::vector<int> a(n); for (int& x : a) std::cin >> x; std::rotate(a.begin(), a.end() - k % n, a.end()); for (int i = 0; i < n; i++) std::cout << (i ? " " : "") << a[i]; std::cout << "\n";}
Cmain.c · 14 줄
#include <stdio.h>int main(void) { int n, k, a[100]; scanf("%d %d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &a[i]); k %= n; for (int i = 0; i < n; i++) { if (i > 0) putchar(' '); printf("%d", a[(i - k + n) % n]); } putchar('\n'); return 0;}
Craykonmain.cray · 10 줄
nk = 콘솔.수들읽기();n = nk[0];k = nk[1] % n;a = 콘솔.수들읽기();result = a.부분목록(n - k, k);각각 (x 에서 a.부분목록(0, n - k)){ result.넣기(x);}콘솔.쓰기(result);