영어 글자 두 개 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
오류 목록00F8 ↓ · ⇧F8 ↑
입력(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;}