from collections import dequen, m = map(int, input().split())need = list(map(int, input().split()))line = deque(range(n)) # 줄에 선 사람의 번호(0부터)left = need[:] # 아직 사야 할 표order = []while line: person = line.popleft() left[person] -= min(m, left[person]) if left[person] > 0: line.append(person) # 더 필요하면 맨 뒤로 else: order.append(person + 1)print(*order)
JavaScriptmain.js · 15 行
const [n, m, ...need] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// 배열 + 앞 자리(head)로 큐를 만든다. shift()는 뒤의 것을 모두 당겨서 느릴 수 있다.const line = [];for (let i = 0; i < n; i++) line.push(i);let head = 0;const left = need.slice();const order = [];while (head < line.length) { const person = line[head++]; left[person] -= Math.min(m, left[person]); if (left[person] > 0) line.push(person); // 더 필요하면 맨 뒤로 else order.push(person + 1);}console.log(order.join(" "));
TypeScriptmain.ts · 17 行
import { readFileSync } from "node:fs";const [n, m, ...need]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);// 배열 + 앞 자리(head)로 큐를 만든다. shift()는 뒤의 것을 모두 당겨서 느릴 수 있다.const line: number[] = [];for (let i = 0; i < n; i++) line.push(i);let head = 0;const left: number[] = need.slice();const order: number[] = [];while (head < line.length) { const person = line[head++]; left[person] -= Math.min(m, left[person]); if (left[person] > 0) line.push(person); // 더 필요하면 맨 뒤로 else order.push(person + 1);}console.log(order.join(" "));
JavaMain.java · 30 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayDeque;import java.util.StringJoiner;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(in.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int[] left = new int[n]; ArrayDeque<Integer> line = new ArrayDeque<>(); st = new StringTokenizer(in.readLine()); for (int i = 0; i < n; i++) { left[i] = Integer.parseInt(st.nextToken()); line.addLast(i); } StringJoiner order = new StringJoiner(" "); while (!line.isEmpty()) { int person = line.pollFirst(); left[person] -= Math.min(m, left[person]); if (left[person] > 0) line.addLast(person); // 더 필요하면 맨 뒤로 else order.add(String.valueOf(person + 1)); } System.out.println(order); }}
C#Main.cs · 22 行
using System;using System.Collections.Generic;using System.Linq;class Program{ static void Main() { int m = int.Parse(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries)[1]); int[] left = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var line = new Queue<int>(Enumerable.Range(0, left.Length)); var order = new List<int>(); while (line.Count > 0) { int person = line.Dequeue(); left[person] -= Math.Min(m, left[person]); if (left[person] > 0) line.Enqueue(person); // 더 필요하면 맨 뒤로 else order.Add(person + 1); } Console.WriteLine(string.Join(" ", order)); }}
C++main.cpp · 28 行
#include <algorithm>#include <iostream>#include <queue>#include <vector>int main() { int n, m; std::cin >> n >> m; std::vector<int> left(n); std::queue<int> line; for (int i = 0; i < n; i++) { std::cin >> left[i]; line.push(i); } bool first = true; while (!line.empty()) { int person = line.front(); line.pop(); left[person] -= std::min(m, left[person]); if (left[person] > 0) { line.push(person); // 더 필요하면 맨 뒤로 } else { std::cout << (first ? "" : " ") << person + 1; first = false; } } std::cout << "\n";}
Cmain.c · 31 行
#include <stdio.h>#define MAXN 1000/* 크기 MAXN인 원형 큐: 줄에는 많아야 n명만 있다 */static int queue[MAXN];static int left[MAXN];int main(void) { int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d", &left[i]); queue[i] = i; } int head = 0, size = n, printed = 0; while (size > 0) { int person = queue[head]; head = (head + 1) % MAXN; size--; left[person] -= left[person] < m ? left[person] : m; if (left[person] > 0) { queue[(head + size) % MAXN] = person; /* 더 필요하면 맨 뒤로 */ size++; } else { printf(printed++ ? " %d" : "%d", person + 1); } } putchar('\n'); return 0;}
Craykonmain.cray · 32 行
첫줄 = 控制台.读数字();n = 첫줄[0];m = 첫줄[1];left = 控制台.读数字();// 원형 큐: 줄에는 많아야 n명이라 n칸이면 된다. head는 맨 앞 자리, size는 줄 길이.line = 新列表(n, 0);循环 (i = 0; i < n; i++){ line[i] = i;}head = 0;size = n;order = [];当 (size > 0){ person = line[head]; head = (head + 1) % n; size -= 1; left[person] -= 数学.较小值(m, left[person]); 如果 (left[person] > 0) { // 더 필요하면 맨 뒤로 line[(head + size) % n] = person; size += 1; } 否则 { order.添加(person + 1); }}控制台.输出(order);