건너뛰며 거꾸로 세기
정수 n과 s가 주어진다.
n에서 시작해 s씩 줄여 가며, 1 이상인 수만 한 줄에 출력하라.
수와 수 사이에는 빈칸을 하나씩 두고, 줄 앞에는 빈칸을 두지 않는다.
예를 들어 n = 10, s = 3이면 10 7 4 1, n = 10, s = 5이면 10 5이다(0은 출력하지 않는다).
- 입력
- 1 ≤ s ≤ n ≤ 10,000
- 출력
- 한 줄
10 3
10 7 4 1
10 5
10 5
정수 n과 s가 주어진다.
n에서 시작해 s씩 줄여 가며, 1 이상인 수만 한 줄에 출력하라.
수와 수 사이에는 빈칸을 하나씩 두고, 줄 앞에는 빈칸을 두지 않는다.
예를 들어 n = 10, s = 3이면 10 7 4 1, n = 10, s = 5이면 10 5이다(0은 출력하지 않는다).
10 3
10 7 4 1
10 5
10 5
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
어디서 멈추는지가 함정이에요.
Python range(n, 0, -s)는 끝(0)을 빼서 1까지 가고, range(n, 1, -s)라고 쓰면 1에 닿아도 1이 빠져요.
C 계열 for (i = n; i >= 1; i -= s)에서 i >= 0이라고 쓰면 n이 s의 배수일 때 0까지 찍어요.
개수를 따로 세서 돌면 n / s가 아니라 (n - 1) / s + 1개예요(10 3은 4개).
빈칸은 사이에만 둬요: 수마다 앞에 " "을 붙이면 줄이 빈칸으로 시작해서 틀려요(이 채점기는 줄 끝 빈칸만 봐줘요).
사이에 넣어 잇는 도구가 언어마다 있어요: Python " ".join(...) 또는 print(*range(n, 0, -s)), JS·TS 배열.join(" "), Java StringJoiner·String.join, C# string.Join(" ", …).
C와 C++(C++23 전)에는 마땅한 도구가 없어서 "첫 수가 아니면 빈칸"을 직접 써요.
크레이콘은 C처럼 콘솔.이어쓰기(…)로 줄을 바꾸지 않고 쓰다가 마지막에 콘솔.쓰기("")로 줄을 바꿔요(목록에 모아 목록.잇기(" ")로 써도 돼요).
거꾸로 걸음은 반복 (i = n; i >= 1; i -= s).
n, s = map(int, input().split())# range(시작, 끝, 걸음): 끝(0)은 들어가지 않는다 → 1까지print(" ".join(str(i) for i in range(n, 0, -s)))const [n, s] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];for (let i = n; i >= 1; i -= s) out.push(i);console.log(out.join(" "));import { readFileSync } from "node:fs";const [n, s]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];for (let i = n; i >= 1; i -= s) out.push(i);console.log(out.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(), s = sc.nextInt(); StringJoiner out = new StringJoiner(" "); for (int i = n; i >= 1; i -= s) out.add(String.valueOf(i)); System.out.println(out); }}using System;using System.Collections.Generic; class Program{ static void Main() { int[] v = Array.ConvertAll(Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries), int.Parse); int n = v[0], s = v[1]; var out_ = new List<int>(); for (int i = n; i >= 1; i -= s) out_.Add(i); Console.WriteLine(string.Join(" ", out_)); }}#include <iostream> int main() { std::ios::sync_with_stdio(false); int n, s; std::cin >> n >> s; for (int i = n; i >= 1; i -= s) { if (i != n) std::cout << ' '; std::cout << i; } std::cout << "\n";}#include <stdio.h> int main(void) { int n, s; scanf("%d %d", &n, &s); for (int i = n; i >= 1; i -= s) { if (i != n) putchar(' '); /* 사이에만 빈칸: 첫 수 앞에는 없음 */ printf("%d", i); } putchar('\n'); return 0;}v = 콘솔.수들읽기();n = v[0];s = v[1];반복 (i = n; i >= 1; i -= s){ 만약 (i != n) { 콘솔.이어쓰기(" "); } 콘솔.이어쓰기(i);}콘솔.쓰기("");