{ }codelper
문자열 나누기문자열 잇기목록 뒤집기P0028

단어 순서 뒤집기

영어 소문자와 숫자로 된 단어들이 빈칸으로 나뉜 한 줄이 주어진다.
단어 사이의 빈칸은 하나 이상일 수 있고, 줄의 앞뒤에도 빈칸이 있을 수 있다.
단어의 순서를 거꾸로 하여, 단어 사이에 빈칸을 정확히 하나씩 두고 한 줄로 출력하라.
단어 안의 글자 순서는 그대로 둔다.
줄의 앞뒤에는 빈칸을 쓰지 않는다.

입력
줄 길이 1 ~ 1,000, 단어는 1개 이상
출력
뒤집은 순서의 단어들, 빈칸 하나로 구분
예시 1 · stdin
the quick brown fox
stdout
fox brown quick the
예시 2 · stdin
  keep   it  simple 
stdout
simple it keep
main.py
입력(stdin)

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

$ 준비됐어요

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

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

나누기 → 뒤집기 → 잇기, 세 단계는 같고 이름만 달라요.
나누기: Python split()(인자 없음), JS·TS trim().split(/\s+/), Java trim().split("\\s+"), C# Split(' ', StringSplitOptions.RemoveEmptyEntries), 크레이콘 나누기().
C·C++은 scanf("%s")·cin >>가 빈칸을 알아서 건너뛰어요.
뒤집기: Python reversed, JS reverse()(배열 자체를 바꿔요), Java Collections.reverse, C# Array.Reverse, C++ std::reverse, 크레이콘 뒤집기().
잇기: Python " ".join, Java String.join, C# string.Join, 크레이콘 잇기(" ").
함정: split(" ")처럼 빈칸 하나로 나누면 빈칸이 이어진 곳에서 빈 조각이 생겨, 이었을 때 빈칸이 겹쳐 나와요.
문자열 전체를 뒤집으면 단어 안의 글자까지 거꾸로 돼요.

Pythonmain.py · 2 줄
words = input().split()print(" ".join(reversed(words)))
JavaScriptmain.js · 3 줄
const line = require("fs").readFileSync(0, "utf8").split("\n")[0];const words = line.trim().split(/\s+/);console.log(words.reverse().join(" "));
TypeScriptmain.ts · 4 줄
import { readFileSync } from "node:fs";const line: string = readFileSync(0, "utf8").split("\n")[0];const words: string[] = line.trim().split(/\s+/);console.log(words.reverse().join(" "));
JavaMain.java · 14 줄
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;import java.util.Collections;import java.util.List; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        List<String> words = Arrays.asList(br.readLine().trim().split("\\s+"));        Collections.reverse(words);        System.out.println(String.join(" ", words));    }}
C#Main.cs · 11 줄
using System; class Program{    static void Main()    {        string[] words = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        Array.Reverse(words);        Console.WriteLine(string.Join(" ", words));    }}
C++main.cpp · 16 줄
#include <algorithm>#include <iostream>#include <string>#include <vector> int main() {    std::vector<std::string> words;    std::string w;    while (std::cin >> w) words.push_back(w);    std::reverse(words.begin(), words.end());    for (size_t i = 0; i < words.size(); i++) {        if (i > 0) std::cout << ' ';        std::cout << words[i];    }    std::cout << "\n";}
Cmain.c · 13 줄
#include <stdio.h> static char words[500][1001]; int main(void) {    int n = 0;    while (n < 500 && scanf("%1000s", words[n]) == 1) n++;    for (int i = n - 1; i >= 0; i--) {        printf("%s", words[i]);        putchar(i > 0 ? ' ' : '\n');    }    return 0;}
Craykonmain.cray · 3 줄
words = 콘솔.줄읽기().나누기();words.뒤집기();콘솔.쓰기(words.잇기(" "));