{ }codelper
문자 하나줄 안 바꾸고 출력P0045

글자 사슬

영어 글자 두 개 a와 b가 빈칸 하나를 사이에 두고 한 줄에 주어진다.
두 글자는 둘 다 소문자이거나 둘 다 대문자다.
a부터 b까지 알파벳 차례로 한 글자씩, 사이에 "-"를 넣어 한 줄에 출력하라.
a가 b보다 뒤 글자이면 거꾸로(b 쪽으로) 간다.
a와 b가 같으면 그 글자 하나만 쓴다.
맨 앞과 맨 끝에는 "-"를 쓰지 않는다.

입력
a, b: 영어 글자 하나씩, 같은 대소문자
출력
글자와 "-"로 이루어진 한 줄
예시 1 · stdin
c g
stdout
c-d-e-f-g
예시 2 · stdin
E B
stdout
E-D-C-B
main.py
입력(stdin)

실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).

$ 준비됐어요

코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.

다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이

글자를 '수처럼' 다루는 방법이 언어마다 달라요.
C의 char는 작은 정수라 c + 1이 곧 다음 글자이고 putchar(c)로 찍어요.
C++·Java·C#도 글자 타입이 있지만 char + int의 결과는 int라서, Java System.out.print('c' + 1)과 C++ std::cout << 'c' + 1은 "100"을 찍어요 — (char)(c + 1)로 되돌리거나 char 변수에 다시 담아야 해요.
반복 변수를 int로 잡고 그대로 찍어도 "99-100-101"이 나와요.
Python·JS·TS에는 글자 타입이 없고 한 글자짜리 문자열뿐이라 코드와 오가야 해요: Python ord("a")·chr(97), JS·TS "a".charCodeAt(0)·String.fromCharCode(97), 크레이콘 글자.코드("a")·글자.글자로변환(97).
이걸 빼먹으면 JS "c" + 1은 조용히 "c1"이 되고, Python은 TypeError로 멈춰요.
줄을 바꾸지 않고 이어 쓰기: Python print(x, end=""), JS·TS process.stdout.write(console.log는 늘 줄을 바꿔요), Java System.out.print, C# Console.Write, C putchar·printf, C++ std::cout << x, 크레이콘 콘솔.이어쓰기.
흔한 함정은 글자마다 뒤에 "-"를 붙여 끝에 "-"가 하나 남는 것 — 첫 글자가 아닐 때만 앞에 붙이거나, 목록에 모아 "-".join·join("-")으로 이어요.
끝에 줄바꿈 하나도 잊지 말고요.
그리고 a > b인 거꾸로 가는 경우도 있어요.

Pythonmain.py · 8 줄
a, b = input().split()# 글자 ↔ 코드: ord("a") == 97, chr(97) == "a"step = 1 if a <= b else -1for code in range(ord(a), ord(b) + step, step):    if code != ord(a):        print("-", end="")    print(chr(code), end="")print()
JavaScriptmain.js · 10 줄
const [a, b] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);// 글자 ↔ 코드: "a".charCodeAt(0) === 97, String.fromCharCode(97) === "a"const from = a.charCodeAt(0);const to = b.charCodeAt(0);const step = from <= to ? 1 : -1;for (let code = from; code !== to + step; code += step) {  if (code !== from) process.stdout.write("-");  process.stdout.write(String.fromCharCode(code));}process.stdout.write("\n");
TypeScriptmain.ts · 11 줄
import { readFileSync } from "node:fs";const [a, b]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);// 글자 ↔ 코드: "a".charCodeAt(0) === 97, String.fromCharCode(97) === "a"const from: number = a.charCodeAt(0);const to: number = b.charCodeAt(0);const step: number = from <= to ? 1 : -1;for (let code = from; code !== to + step; code += step) {  if (code !== from) process.stdout.write("-");  process.stdout.write(String.fromCharCode(code));}process.stdout.write("\n");
JavaMain.java · 17 줄
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        char a = sc.next().charAt(0);        char b = sc.next().charAt(0);        int step = a <= b ? 1 : -1;        StringBuilder out = new StringBuilder();        // char + int 는 int 가 되므로 (char)로 되돌린다        for (char c = a; c != b + step; c = (char) (c + step)) {            if (c != a) out.append('-');            out.append(c);        }        System.out.println(out);    }}
C#Main.cs · 19 줄
using System; class Program{    static void Main()    {        string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        char a = parts[0][0];        char b = parts[1][0];        int step = a <= b ? 1 : -1;        // char + int 는 int 가 되므로 (char)로 되돌린다        for (char c = a; c != b + step; c = (char)(c + step))        {            if (c != a) Console.Write('-');            Console.Write(c);        }        Console.WriteLine();    }}
C++main.cpp · 13 줄
#include <iostream> int main() {    char a, b;    std::cin >> a >> b;    int step = a <= b ? 1 : -1;    // c + step 은 int 라서 char 변수에 다시 담아야 글자로 찍힌다    for (char c = a; c != b + step; c += step) {        if (c != a) std::cout << '-';        std::cout << c;    }    std::cout << '\n';}
Cmain.c · 14 줄
#include <stdio.h> int main(void) {    char a, b;    scanf(" %c %c", &a, &b);    int step = a <= b ? 1 : -1;    /* C의 char는 작은 정수라 c + step 이 곧 다음 글자다 */    for (char c = a; c != b + step; c += step) {        if (c != a) putchar('-');        putchar(c);    }    putchar('\n');    return 0;}
Craykonmain.cray · 19 줄
글자들 = 콘솔.줄읽기().나누기(" ");처음 = 글자.코드(글자들[0]);끝 = 글자.코드(글자들[1]);걸음 = 1;만약 (처음 > 끝){    걸음 = -1;}코드 = 처음;동안 (코드 != 끝 + 걸음){    만약 (코드 != 처음)    {        콘솔.이어쓰기("-");    }    콘솔.이어쓰기(글자.글자로변환(코드));    코드 += 걸음;}콘솔.쓰기("");