간판 가게에서 낱말 간판을 떼어 내, 글자 조각을 상자에 차례로 정리한다.
첫 줄에 낱말 수 n이, 다음 n줄에 낱말이 하나씩 주어진다.
낱말은 숫자(0~9), 영어 대문자, 영어 소문자로만 이루어진다.
낱말마다 그 글자들을 글자 코드(ASCII)가 작은 것부터 늘어놓은 문자열을 한 줄에 출력하라.
그래서 숫자가 모두 대문자보다 앞에 오고, 대문자가 모두 소문자보다 앞에 온다(b, A, 9, a → 9Aab).
같은 글자는 나온 만큼 모두 쓴다.
입력
1 ≤ n ≤ 100, 낱말 길이 1 ~ 1,000. 낱말에는 숫자와 영어 대문자·소문자만 있다
출력
n줄, 줄마다 글자를 코드 순으로 늘어놓은 문자열
예시 1 · stdin
3
banana
Codelper2026
ZzAa
stdout
aaabnn
0226Cdeelopr
AZaz
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
문자열을 글자 목록으로 바꿔 정렬하고 다시 문자열로 잇는 세 걸음이에요. 마지막 걸음에서 언어마다 함정이 있어요. Python sorted(w)는 글자 목록을 돌려줘서 그대로 찍으면 ['a', 'b']가 나오니 "".join(sorted(w))로 이어요. Java는 char[] a = w.toCharArray(); Arrays.sort(a); 뒤에 new String(a)로 바꿔요. a.toString()은 [C@1b6d3586 같은 문자열을, C#의 a.ToString()은 System.Char[]를 줘요(C#은 Array.Sort(a) 뒤 new string(a)). JS·TS는 [...w].sort().join("")인데, 수를 정렬할 때 쓰던 (a, b) => a - b를 그대로 붙이면 글자끼리 빼기가 NaN이라 아무것도 바뀌지 않아요. 글자는 비교 함수 없이 sort()가 코드 순이에요. C++는 std::sort(w.begin(), w.end())로 문자열을 바로 정렬하고, C는 qsort(w, strlen(w), 1, cmp)로 1바이트짜리 칸을 정렬해요. 크레이콘은 각각 (c 에서 w)로 글자를 목록에 넣고 글자들.정렬(); 뒤 글자들.잇기("")로 이어요. 순서는 사전 순이 아니라 코드 순이라 대문자 Z(90)가 소문자 a(97)보다 앞이에요. 대소문자를 무시하고 정렬하면(key=str.lower) ZzAa가 AaZz가 되어 틀려요.
Pythonmain.py · 5 줄
n = int(input())for _ in range(n): w = input().strip() # sorted(문자열)은 글자 목록을 준다 → "".join으로 다시 문자열로 print("".join(sorted(w)))
JavaScriptmain.js · 3 줄
const [n, ...words] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);// 글자끼리는 비교 함수 없이 sort()가 글자 코드 순이다console.log(words.map((w) => [...w].sort().join("")).join("\n"));
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;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++) { char[] a = in.readLine().trim().toCharArray(); Arrays.sort(a); // char[]를 문자열로: new String(a) (a.toString()은 주소 같은 글자가 나온다) out.append(new String(a)).append('\n'); } System.out.print(out); }}
C#Main.cs · 18 줄
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine().Trim()); var sb = new StringBuilder(); for (int i = 0; i < n; i++) { char[] a = Console.ReadLine().Trim().ToCharArray(); Array.Sort(a); // char는 코드 순으로 정렬된다 sb.Append(new string(a)).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 16 줄
#include <algorithm>#include <iostream>#include <string>int main() { int n; std::cin >> n; std::string out; for (int k = 0; k < n; k++) { std::string w; std::cin >> w; std::sort(w.begin(), w.end()); // string은 char를 담은 목록처럼 바로 정렬된다 out += w + "\n"; } std::cout << out;}
Cmain.c · 20 줄
#include <stdio.h>#include <stdlib.h>#include <string.h>static int by_code(const void *pa, const void *pb) { unsigned char a = *(const unsigned char *)pa, b = *(const unsigned char *)pb; return (a > b) - (a < b);}int main(void) { int n; static char w[1024]; scanf("%d", &n); for (int k = 0; k < n; k++) { scanf("%1023s", w); qsort(w, strlen(w), 1, by_code); /* 글자 하나가 1바이트 */ puts(w); } return 0;}
Craykonmain.cray · 13 줄
n = 콘솔.줄읽기().수로변환();반복 (i = 0; i < n; i++){ w = 콘솔.줄읽기().공백제거(); // 문자열을 글자 목록으로 옮겨 정렬하고 다시 잇는다 글자들 = []; 각각 (c 에서 w) { 글자들.넣기(c); } 글자들.정렬(); 콘솔.쓰기(글자들.잇기(""));}