{ }codelper
자리 맞추기문자열 길이P0029

이름 오른쪽 맞춤

첫 줄에 이름 수 n, 다음 n줄에 영어 이름이 하나씩 주어진다.
가장 긴 이름의 길이를 폭으로 삼아, 모든 이름을 그 폭에 오른쪽으로 맞춰 입력 순서대로 한 줄씩 출력하라.
오른쪽 맞춤이란 이름 앞(왼쪽)에 빈칸을 붙여 길이를 폭과 같게 만드는 것이다.
가장 긴 이름은 빈칸 없이 그대로 나온다.

입력
1 ≤ n ≤ 100.
이름은 영어 대소문자만, 길이 1 ~ 20
출력
n줄, 각 줄은 앞에 빈칸을 붙여 폭에 맞춘 이름
예시 1 · stdin
3
Ann
Maximilian
Jo
stdout
       Ann
Maximilian
        Jo
main.py
입력(stdin)

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

$ 준비됐어요

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

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

왼쪽에 빈칸을 채우는 함수: Python s.rjust(w), JS·TS s.padStart(w), C# s.PadLeft(w), Java String.format("%" + w + "s", s), C printf("%*s", w, s)(폭을 인자로 넘겨요), C++ std::setw(w).
크레이콘 s.앞채우기(w)(C#의 PadLeft와 같아요, "7".앞채우기(3, "0")이면 007).
이름이 왼쪽에 붙는 쪽은 Python ljust, C %-*s처럼 이름이 비슷해서 헷갈리기 쉬워요.
함정: 폭은 모든 이름을 다 읽은 뒤에야 알 수 있어요.
읽으면서 바로 출력하면 그때까지의 최대 폭으로 맞추게 되고, 폭을 최대 길이 20으로 고정해도 틀려요.

Pythonmain.py · 5 줄
n = int(input())names = [input().strip() for _ in range(n)]width = max(len(name) for name in names)for name in names:    print(name.rjust(width))
JavaScriptmain.js · 4 줄
const [first, ...rest] = require("fs").readFileSync(0, "utf8").split("\n");const names = rest.slice(0, Number(first)).map((s) => s.trim());const width = Math.max(...names.map((s) => s.length));console.log(names.map((s) => s.padStart(width)).join("\n"));
TypeScriptmain.ts · 5 줄
import { readFileSync } from "node:fs";const [first, ...rest]: string[] = readFileSync(0, "utf8").split("\n");const names: string[] = rest.slice(0, Number(first)).map((s) => s.trim());const width: number = Math.max(...names.map((s) => s.length));console.log(names.map((s) => s.padStart(width)).join("\n"));
JavaMain.java · 18 줄
import java.io.BufferedReader;import java.io.InputStreamReader; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(br.readLine().trim());        String[] names = new String[n];        int width = 0;        for (int i = 0; i < n; i++) {            names[i] = br.readLine().trim();            width = Math.max(width, names[i].length());        }        StringBuilder out = new StringBuilder();        for (String name : names) out.append(String.format("%" + width + "s", name)).append('\n');        System.out.print(out);    }}
C#Main.cs · 14 줄
using System;using System.Linq; class Program{    static void Main()    {        int n = int.Parse(Console.ReadLine());        string[] names = new string[n];        for (int i = 0; i < n; i++) names[i] = Console.ReadLine().Trim();        int width = names.Max(s => s.Length);        foreach (string name in names) Console.WriteLine(name.PadLeft(width));    }}
C++main.cpp · 17 줄
#include <algorithm>#include <iomanip>#include <iostream>#include <string>#include <vector> int main() {    int n;    std::cin >> n;    std::vector<std::string> names(n);    size_t width = 0;    for (auto& name : names) {        std::cin >> name;        width = std::max(width, name.size());    }    for (const auto& name : names) std::cout << std::setw(static_cast<int>(width)) << name << "\n";}
Cmain.c · 15 줄
#include <stdio.h>#include <string.h> int main(void) {    int n, width = 0;    char names[100][21];    if (scanf("%d", &n) != 1) return 0;    for (int i = 0; i < n; i++) {        scanf("%20s", names[i]);        int len = (int)strlen(names[i]);        if (len > width) width = len;    }    for (int i = 0; i < n; i++) printf("%*s\n", width, names[i]);    return 0;}
Craykonmain.cray · 13 줄
n = 콘솔.줄읽기().수로변환();names = [];width = 0;반복 (i = 0; i < n; i++){    name = 콘솔.줄읽기().공백제거();    names.넣기(name);    width = 수학.큰수(width, name.길이);}각각 (name 에서 names){    콘솔.쓰기(name.앞채우기(width));}