길이가 L미터인 산책로에 가로등을 세운다.
길의 시작점(0미터 지점)에 첫 가로등을 세우고, 거기서부터 s미터마다 하나씩 세운다.
길의 끝(L미터 지점)에는 간격이 맞지 않아도 가로등을 꼭 하나 세운다.
같은 지점에 가로등을 두 개 세우지는 않는다.
한 줄에 L과 s가 빈칸 하나로 띄워 주어진다.
가로등을 세우는 지점이 시작점에서 몇 미터 떨어져 있는지를, 가까운 것부터 한 줄에 하나씩 출력하라.
예를 들어 L = 10, s = 3이면 0, 3, 6, 9, 10이고, L = 10, s = 5이면 0, 5, 10이다.
입력
1 ≤ L ≤ 1,000, 1 ≤ s ≤ 1,000(모두 정수). s가 L보다 클 수도 있다
출력
가로등 지점마다 한 줄씩, 작은 수부터. 단위 없이 숫자만 쓴다
예시 1 · stdin
10 3
stdout
0
3
6
9
10
예시 2 · stdin
10 5
stdout
0
5
10
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
걸음을 정해 건너뛰는 반복문은 언어마다 모양이 달라요. Python은 for x in range(0, L, s)이고 끝(L)은 들어가지 않아요. C·C++·Java·C#·JS·TS는 for (x = 0; x < L; x += s), 크레이콘은 반복 (x = 0; x < L; x += s)예요. 이렇게 L 앞까지만 돌고 나서 L을 한 번 쓰면 끝 지점이 겹치지도 빠지지도 않아요. 함정 하나: x <= L까지 돌고 L을 또 쓰면, L이 s의 배수일 때 끝 지점이 두 번 나와요(예시 2가 0 5 10 10). 함정 둘: range(0, L + 1, s)처럼 끝까지 돌기만 하고 L을 따로 쓰지 않으면, L이 s의 배수가 아닐 때 끝 가로등이 빠져요(예시 1이 0 3 6 9). 함정 셋: 지점 대신 횟수를 세어 i < L / s인 동안 i * s를 쓰는 방법은 언어에 따라 결과가 갈려요. C·C++·Java·C#은 정수끼리의 /가 몫만 남겨서 10 / 3이 3이고, i가 0, 1, 2일 때만 돌아 9가 빠져요(예시 1이 0 3 6 10). JS·TS·크레이콘은 /가 3.333…까지 나눠서 i가 3일 때도 돌아 맞게 나와요. Python은 range(L / s)가 소수를 받지 않아 TypeError로 멈추고, range(L // s)로 고치면 C처럼 9가 빠져요.
Pythonmain.py · 5 줄
L, s = map(int, input().split())# range(0, L, s)는 0부터 s씩 건너뛰며, 끝(L)은 넣지 않는다for x in range(0, L, s): print(x)print(L) # 길 끝의 가로등은 따로 한 번
JavaScriptmain.js · 8 줄
const [L, s] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다for (let x = 0; x < L; x += s) { out.push(x);}out.push(L); // 길 끝의 가로등은 따로 한 번console.log(out.join("\n"));
TypeScriptmain.ts · 9 줄
import { readFileSync } from "node:fs";const [L, s]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: number[] = [];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다for (let x = 0; x < L; x += s) { out.push(x);}out.push(L); // 길 끝의 가로등은 따로 한 번console.log(out.join("\n"));
JavaMain.java · 13 줄
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int L = sc.nextInt(), s = sc.nextInt(); // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { System.out.println(x); } System.out.println(L); // 길 끝의 가로등은 따로 한 번 }}
C#Main.cs · 16 줄
using System;class Program{ static void Main() { string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int L = int.Parse(parts[0]), s = int.Parse(parts[1]); // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { Console.WriteLine(x); } Console.WriteLine(L); // 길 끝의 가로등은 따로 한 번 }}
C++main.cpp · 11 줄
#include <iostream>int main() { int L, s; std::cin >> L >> s; // x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 for (int x = 0; x < L; x += s) { std::cout << x << "\n"; } std::cout << L << "\n"; // 길 끝의 가로등은 따로 한 번}
Cmain.c · 12 줄
#include <stdio.h>int main(void) { int L, s; if (scanf("%d %d", &L, &s) != 2) return 0; /* x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다 */ for (int x = 0; x < L; x += s) { printf("%d\n", x); } printf("%d\n", L); /* 길 끝의 가로등은 따로 한 번 */ return 0;}
Craykonmain.cray · 9 줄
nums = 콘솔.수들읽기();L = nums[0];s = nums[1];// x += s로 s씩 건너뛴다. 끝(L)은 넣지 않는다반복 (x = 0; x < L; x += s){ 콘솔.쓰기(x);}콘솔.쓰기(L); // 길 끝의 가로등은 따로 한 번