영어 대문자 하나 C가 주어진다. A부터 C까지 k + 1줄(k는 C가 A에서 떨어진 칸 수, A이면 0)의 글자 피라미드를 출력하라. 위에서 i번째 줄(0부터)은 빈칸 k - i개, 그다음 A부터 A에서 i칸 뒤 글자까지 차례로, 그다음 그 바로 앞 글자부터 거꾸로 A까지다. 예를 들어 C = D이면 마지막 줄은 "ABCDCBA"다. 줄 끝에는 빈칸을 넣지 않는다.
입력
C는 A부터 Z까지의 대문자 하나
출력
k + 1줄의 피라미드
예시 1 · stdin
D
stdout
A
ABA
ABCBA
ABCDCBA
예시 2 · stdin
A
stdout
A
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
글자를 수로 바꿔 더한 다음 다시 글자로 돌리는 방법이 언어마다 달라요. Python chr(ord("A") + j), JS·TS String.fromCharCode(65 + j). JS에서 "A" + 1은 계산이 아니라 문자열 잇기라 "A1"이 돼요. C·C++·Java·C#에서 'A' + j는 int예요. C의 putchar는 int를 글자로 찍지만, C++ cout << 'A' + j와 Java StringBuilder.append('A' + j)는 65처럼 수를 찍어요. (char)나 static_cast<char>로 되돌려야 해요. 같은 글자를 되풀이하는 방법도 달라요. Python " " * n, JS·TS·Java(11부터) " ".repeat(n), C# new string(' ', n), C++ std::string(n, ' '). C에는 되풀이 함수가 없어서 반복문을 쓰거나 printf("%*s", n, "")로 너비만큼 빈칸을 찍어요. 크레이콘은 글자.코드("A")로 수를 얻고 글자.글자로변환(a + j)로 되돌리며, 빈칸은 " ".되풀이(k - i)로 만들어요.
Pythonmain.py · 5 줄
k = ord(input().strip()) - ord("A")for i in range(k + 1): up = "".join(chr(ord("A") + j) for j in range(i + 1)) # 올라간 글자 + 마지막 글자를 뺀 거꾸로 print(" " * (k - i) + up + up[-2::-1])
JavaScriptmain.js · 9 줄
const k = require("fs").readFileSync(0, "utf8").trim().charCodeAt(0) - 65;const lines = [];for (let i = 0; i <= k; i++) { let up = ""; for (let j = 0; j <= i; j++) up += String.fromCharCode(65 + j); const down = up.slice(0, -1).split("").reverse().join(""); lines.push(" ".repeat(k - i) + up + down);}console.log(lines.join("\n"));
TypeScriptmain.ts · 10 줄
import { readFileSync } from "node:fs";const k: number = readFileSync(0, "utf8").trim().charCodeAt(0) - 65;const lines: string[] = [];for (let i = 0; i <= k; i++) { let up = ""; for (let j = 0; j <= i; j++) up += String.fromCharCode(65 + j); const down: string = up.slice(0, -1).split("").reverse().join(""); lines.push(" ".repeat(k - i) + up + down);}console.log(lines.join("\n"));
JavaMain.java · 16 줄
import java.util.Scanner;public class Main { public static void main(String[] args) { int k = new Scanner(System.in).next().charAt(0) - 'A'; StringBuilder out = new StringBuilder(); for (int i = 0; i <= k; i++) { out.append(" ".repeat(k - i)); // 'A' + j 는 int라서 (char)로 되돌려야 글자로 붙는다 for (int j = 0; j <= i; j++) out.append((char) ('A' + j)); for (int j = i - 1; j >= 0; j--) out.append((char) ('A' + j)); out.append('\n'); } System.out.print(out); }}
C#Main.cs · 20 줄
using System;using System.Text;class Program{ static void Main() { int k = Console.ReadLine().Trim()[0] - 'A'; var output = new StringBuilder(); for (int i = 0; i <= k; i++) { output.Append(new string(' ', k - i)); // 'A' + j 는 int라서 (char)로 되돌려야 글자로 붙는다 for (int j = 0; j <= i; j++) output.Append((char)('A' + j)); for (int j = i - 1; j >= 0; j--) output.Append((char)('A' + j)); output.Append('\n'); } Console.Write(output); }}
C++main.cpp · 15 줄
#include <iostream>#include <string>int main() { char c; std::cin >> c; int k = c - 'A'; for (int i = 0; i <= k; i++) { std::string line(k - i, ' '); // 'A' + j 는 int라서 char로 되돌려 붙인다 for (int j = 0; j <= i; j++) line += static_cast<char>('A' + j); for (int j = i - 1; j >= 0; j--) line += static_cast<char>('A' + j); std::cout << line << '\n'; }}
Cmain.c · 15 줄
#include <stdio.h>int main(void) { char c; scanf(" %c", &c); int k = c - 'A'; for (int i = 0; i <= k; i++) { // C에는 되풀이 함수가 없다: %*s 에 빈 문자열을 주면 그 너비만큼 빈칸이 찍힌다 printf("%*s", k - i, ""); for (int j = 0; j <= i; j++) putchar('A' + j); for (int j = i - 1; j >= 0; j--) putchar('A' + j); putchar('\n'); } return 0;}
Craykonmain.cray · 15 줄
a = 글자.코드("A");k = 글자.코드(콘솔.줄읽기().공백제거()) - a;반복 (i = 0; i <= k; i++){ line = " ".되풀이(k - i); 반복 (j = 0; j <= i; j++) { line += 글자.글자로변환(a + j); } 반복 (j = i - 1; j >= 0; j--) { line += 글자.글자로변환(a + j); } 콘솔.쓰기(line);}