쪽지에 낱말 n개가 한 줄에 하나씩 적혀 있다.
첫째 낱말에서는 첫째 글자를, 둘째 낱말에서는 둘째 글자를 뽑는 식으로, i째 낱말에서 i째 글자를 뽑는다.
i째 낱말의 길이가 i보다 짧아서 뽑을 글자가 없으면 글자 대신 * 를 쓴다.
첫 줄에 n이 주어지고, 다음 n줄에 낱말이 하나씩 주어진다.
이렇게 얻은 n개를 첫째 낱말의 것부터 차례대로 빈칸 없이 이어 붙여 한 줄에 출력하라.
입력
1 ≤ n ≤ 100, 낱말은 영어 소문자만으로 된 길이 1 ~ 100의 문자열
출력
n글자짜리 문자열 한 줄(영어 소문자와 *)
예시 1 · stdin
4
cat
bone
do
gold
stdout
co*d
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
글자 번호는 8개 언어 모두 0부터 세요. 그래서 반복 변수 i를 0부터 돌리면 i째(사람이 세면 i + 1째) 낱말에서 word[i]를 뽑으면 되고, 쓸 수 있는 번호는 0부터 길이 - 1까지예요. 뽑기: Python·JS·TS·C#·C·C++·크레이콘 word[i], Java word.charAt(i). 길이: Python len(word), JS·TS word.length, Java word.length(), C# word.Length, C++ word.size(), C strlen(word), 크레이콘 word.길이. 범위 밖 번호를 읽을 때 일어나는 일이 언어마다 아주 달라요. Python은 IndexError, Java는 StringIndexOutOfBoundsException, C#은 IndexOutOfRangeException으로 멈추고, 크레이콘도 "문자열에는 0~2번만 있어요"라며 멈춰요. JS·TS의 word[i]는 멈추지 않고 undefined를 줘서 답에 "undefined"라는 문자열이 붙어요(word.charAt(i)는 빈 문자열). C는 검사하지 않고 배열에 남아 있던 앞 낱말의 글자나 끝 표시 \0을 그대로 내놓아요. C++ word[i]도 검사하지 않고, word.at(i)를 써야 std::out_of_range를 던져요. 그래서 뽑기 전에 i < 길이인지 먼저 물어요. 함정 둘: ① i <= 길이로 물으면 길이가 꼭 i인 낱말에서 범위를 벗어나요. ② 사람이 세는 번호(1부터)를 그대로 word[i]에 쓰면 한 칸 뒤의 글자가 나와요.
Pythonmain.py · 9 줄
n = int(input())answer = ""for i in range(n): word = input().strip() if i < len(word): # 번호는 0부터라서 i째 낱말의 글자 번호는 0 ~ len - 1 answer += word[i] else: answer += "*"print(answer)
JavaScriptmain.js · 9 줄
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);let answer = "";for (let i = 0; i < n; i++) { const word = lines[i + 1].trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length - 1 answer += i < word.length ? word[i] : "*";}console.log(answer);
TypeScriptmain.ts · 10 줄
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);let answer = "";for (let i = 0; i < n; i++) { const word: string = lines[i + 1].trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length - 1 answer += i < word.length ? word[i] : "*";}console.log(answer);
JavaMain.java · 17 줄
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(in.readLine().trim()); StringBuilder answer = new StringBuilder(); for (int i = 0; i < n; i++) { String word = in.readLine().trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length() - 1 answer.append(i < word.length() ? word.charAt(i) : '*'); } System.out.println(answer); }}
C#Main.cs · 18 줄
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); var answer = new StringBuilder(); for (int i = 0; i < n; i++) { string word = Console.ReadLine().Trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ Length - 1 answer.Append(i < word.Length ? word[i] : '*'); } Console.WriteLine(answer); }}
C++main.cpp · 16 줄
#include <iostream>#include <string>int main() { int n; std::cin >> n; std::string answer; for (int i = 0; i < n; i++) { std::string word; std::cin >> word; // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ size() - 1 if (i < static_cast<int>(word.size())) answer += word[i]; else answer += '*'; } std::cout << answer << '\n';}
Cmain.c · 16 줄
#include <stdio.h>#include <string.h>int main(void) { int n; if (scanf("%d", &n) != 1) return 0; char word[101]; for (int i = 0; i < n; i++) { if (scanf("%100s", word) != 1) return 0; // C는 범위를 검사해 주지 않으니 길이를 직접 물어야 한다 if (i < (int)strlen(word)) putchar(word[i]); else putchar('*'); } putchar('\n'); return 0;}
Craykonmain.cray · 16 줄
n = 콘솔.줄읽기().수로변환();answer = "";반복 (i = 0; i < n; i++){ word = 콘솔.줄읽기().공백제거(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ 길이 - 1 만약 (i < word.길이) { answer += word[i]; } 아니면 { answer += "*"; }}콘솔.쓰기(answer);