{ }codelper
문자열 뒤집기P0252

부호는 그대로 두고 거꾸로 쓰기

수를 거꾸로 적는 놀이를 한다. 첫 줄에 수의 개수 n이, 다음 n줄에 정수가 하나씩 주어진다. 정수마다 숫자의 차례를 맨 끝부터 맨 앞까지 거꾸로 뒤집어 한 줄에 출력하라. 음수이면 맨 앞의 - 부호는 뒤집지 않고 그대로 맨 앞에 둔다(-45 → -54). 뒤집어서 맨 앞에 오게 된 0도 지우지 않고 모두 쓴다(120 → 021, -100 → -001). 0은 그대로 0이다.

입력
1 ≤ n ≤ 100.
정수는 -10^18보다 크고 10^18보다 작다(숫자는 18개까지).
0이 아닌 정수는 0으로 시작하지 않고, 0은 "0"으로만 쓰며 "-0"은 없다.
줄에는 정수 말고 다른 글자가 없다
출력
n줄, 줄마다 거꾸로 쓴 수(부호는 맨 앞, 앞에 온 0도 그대로)
예시 1 · stdin
4
120
-45
7
-100
stdout
021
-54
7
-001
main.py
입력(stdin)

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

$ 준비됐어요

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

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

수로 바꾸지 말고 문자열 그대로 뒤집는 것이 핵심이에요.
x % 10을 모아 수를 다시 만들거나 int(s[::-1])처럼 뒤집은 것을 수로 바꾸면 앞에 온 0이 사라져 120이 21, -100이 -1이 돼요.
수가 21억을 넘어서 C·Java·C#의 int로는 받을 수도 없고, JS·TS·크레이콘은 수가 실수(double)라 Number("123456789012345678")이 이미 123456789012345680으로 바뀌어요.
뒤집는 법은 언어마다 달라요.
Python s[::-1], JS·TS [...s].reverse().join("")(문자열에는 reverse가 없어 배열로 바꿔요), Java new StringBuilder(s).reverse(), C# char[]로 바꿔 Array.Reverse 한 뒤 new string(a), C++ std::reverse(s.begin(), s.end()), 크레이콘 s.뒤집기()예요.
C에는 뒤집는 함수가 없어서 양 끝 글자를 맞바꾸며 가운데로 오는 반복문을 써요.
부호는 따로 다뤄요.
첫 글자가 -이면 떼어 두고 나머지(Python s[1:], Java·C# s.substring(1)·s.Substring(1), 크레이콘 s.부분문자열(1))만 뒤집어 앞에 다시 붙여요.
C·C++는 뒤집기를 1번 칸부터 시작하면 돼요.
통째로 뒤집으면 -45가 54-가 돼요.

Pythonmain.py · 8 줄
n = int(input())for _ in range(n):    s = input().strip()    # 수로 바꾸지 않고 문자열 그대로 뒤집는다(앞에 온 0을 지키려고)    if s[0] == "-":        print("-" + s[1:][::-1])    else:        print(s[::-1])
JavaScriptmain.js · 10 줄
const [n, ...lines] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);const out = [];for (const s of lines) {  // Number로 바꾸면 2^53을 넘는 수가 바뀌고 앞의 0도 사라진다: 문자열 그대로  const neg = s.startsWith("-");  const digits = neg ? s.slice(1) : s;  const rev = [...digits].reverse().join("");  out.push(neg ? "-" + rev : rev);}console.log(out.join("\n"));
TypeScriptmain.ts · 10 줄
import { readFileSync } from "node:fs";const [n, ...lines]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);const out: string[] = [];for (const s of lines) {  const neg: boolean = s.startsWith("-");  const digits: string = neg ? s.slice(1) : s;  const rev: string = [...digits].reverse().join("");  out.push(neg ? "-" + rev : rev);}console.log(out.join("\n"));
JavaMain.java · 20 줄
import java.io.BufferedReader;import java.io.InputStreamReader; public class Main {    public static void main(String[] args) throws Exception {        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.parseInt(in.readLine().trim());        StringBuilder out = new StringBuilder();        for (int i = 0; i < n; i++) {            String s = in.readLine().trim();            if (s.startsWith("-")) {                out.append('-').append(new StringBuilder(s.substring(1)).reverse());            } else {                out.append(new StringBuilder(s).reverse());            }            out.append('\n');        }        System.out.print(out);    }}
C#Main.cs · 26 줄
using System;using System.Text; class Program{    static string Reverse(string s)    {        char[] a = s.ToCharArray();        Array.Reverse(a);        return new string(a);    }     static void Main()    {        int n = int.Parse(Console.ReadLine().Trim());        var sb = new StringBuilder();        for (int i = 0; i < n; i++)        {            string s = Console.ReadLine().Trim();            if (s.StartsWith("-")) sb.Append('-').Append(Reverse(s.Substring(1)));            else sb.Append(Reverse(s));            sb.Append('\n');        }        Console.Write(sb);    }}
C++main.cpp · 16 줄
#include <algorithm>#include <iostream>#include <string> int main() {    int n;    std::cin >> n;    for (int k = 0; k < n; k++) {        std::string s;        std::cin >> s;        // 부호가 있으면 둘째 글자부터 끝까지만 뒤집는다        auto from = (s[0] == '-') ? s.begin() + 1 : s.begin();        std::reverse(from, s.end());        std::cout << s << "\n";    }}
Cmain.c · 23 줄
#include <stdio.h>#include <string.h> int main(void) {    int n;    char s[32];    scanf("%d", &n);    for (int k = 0; k < n; k++) {        scanf("%31s", s);        /* 부호가 있으면 1번 칸부터 뒤집는다 */        int i = (s[0] == '-') ? 1 : 0;        int j = (int)strlen(s) - 1;        while (i < j) {            char t = s[i];            s[i] = s[j];            s[j] = t;            i++;            j--;        }        puts(s);    }    return 0;}
Craykonmain.cray · 14 줄
n = 콘솔.줄읽기().수로변환();반복 (i = 0; i < n; i++){    s = 콘솔.줄읽기().공백제거();    // 수로 바꾸지 않는다: 앞에 온 0이 사라지고, 2^53보다 큰 수는 바뀐다    만약 (s.시작하나("-"))    {        콘솔.쓰기("-" + s.부분문자열(1).뒤집기());    }    아니면    {        콘솔.쓰기(s.뒤집기());    }}