첫 줄에 기록 수 n이 주어지고, 다음 n줄에 "번호 이름"이 빈칸 하나로 나뉘어 주어진다. 같은 번호가 여러 번 나오면 마지막에 나온 이름만 남는다. 서로 다른 번호마다 "번호 이름"을 한 줄씩, 번호가 작은 것부터(수의 크기 순, 음수가 먼저) 출력하라.
입력
1 ≤ n ≤ 2000, -1,000,000,000 ≤ 번호 ≤ 1,000,000,000(정수). 이름은 영어 소문자 1 ~ 12글자
출력
서로 다른 번호 수만큼의 줄, 줄마다 번호와 이름을 빈칸 하나로
예시 1 · stdin
5
30 mina
-2 jun
100 seo
30 hana
7 ari
stdout
-2 jun
7 ari
30 hana
100 seo
main.py
오류 목록00F8 ↓ · ⇧F8 ↑
입력(stdin)
실행하면 이 줄들이 차례로 input()·표준 입력으로 들어가요(실행 중에 묻지 않아요).
$ 준비됐어요
코드를 입력해 풀려면 PC에서 열어 주세요. 모바일에서는 문제와 풀이를 볼 수 있어요.
다른 언어로는?언어별 풀이 보기 · 8개 언어 풀이
사전을 돌 때 어떤 차례로 나오는지가 언어마다 달라요. Python dict와 JS Map, C# Dictionary(문서로 보장하지 않음)는 넣은 차례, Java HashMap과 C++ unordered_map은 정해진 차례가 없어요. 열쇠 순으로 정렬된 채 있는 것은 C++ std::map, Java TreeMap, C# SortedDictionary예요. Python은 sorted(roster)로 열쇠를 정렬해 돌아요. JS에는 함정이 둘 있어요: 비교 함수 없는 keys.sort()는 수도 문자열로 비교해서 10이 9보다 앞에 오고((a, b) => a - b를 넘기세요), 빈 객체 {}는 0 이상의 정수 열쇠만 작은 순으로 앞에 두고 "-3" 같은 열쇠는 넣은 차례로 뒤에 둬요. 번호를 문자열 그대로 열쇠로 두면 어느 언어든 문자열 순서가 돼요. C에는 사전이 없어 구조체 배열을 (번호, 들어온 차례)로 qsort하고 같은 번호의 마지막 것만 써요. 크레이콘 사전()은 Python처럼 넣은 차례를 지키니 keys = roster.열쇠목록; keys.정렬();로 정렬해요(수는 크기 순).
Pythonmain.py · 10 줄
import syslines = sys.stdin.read().split("\n")n = int(lines[0])roster = {}for line in lines[1:n + 1]: key, name = line.split() roster[int(key)] = namefor key in sorted(roster): print(key, roster[key])
JavaScriptmain.js · 9 줄
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const roster = new Map();for (let i = 1; i <= n; i++) { const [key, name] = lines[i].trim().split(" "); roster.set(Number(key), name);}const keys = [...roster.keys()].sort((a, b) => a - b);console.log(keys.map((k) => `${k} ${roster.get(k)}`).join("\n"));
TypeScriptmain.ts · 10 줄
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);const roster = new Map<number, string>();for (let i = 1; i <= n; i++) { const [key, name] = lines[i].trim().split(" "); roster.set(Number(key), name);}const keys: number[] = [...roster.keys()].sort((a, b) => a - b);console.log(keys.map((k) => `${k} ${roster.get(k)}`).join("\n"));
JavaMain.java · 21 줄
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Map;import java.util.TreeMap;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()); Map<Integer, String> roster = new TreeMap<>(); for (int i = 0; i < n; i++) { String[] p = in.readLine().trim().split(" "); roster.put(Integer.parseInt(p[0]), p[1]); } StringBuilder out = new StringBuilder(); for (Map.Entry<Integer, String> e : roster.entrySet()) out.append(e.getKey()).append(' ').append(e.getValue()).append('\n'); System.out.print(out); }}
C#Main.cs · 17 줄
using System;using System.Collections.Generic;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); var roster = new SortedDictionary<int, string>(); for (int i = 0; i < n; i++) { string[] p = Console.ReadLine().Trim().Split(' '); roster[int.Parse(p[0])] = p[1]; } foreach (var kv in roster) Console.WriteLine($"{kv.Key} {kv.Value}"); }}
C++main.cpp · 16 줄
#include <iostream>#include <map>#include <string>int main() { int n; std::cin >> n; std::map<int, std::string> roster; // std::map은 열쇠 순으로 정렬된 채 있다 for (int i = 0; i < n; i++) { int key; std::string name; std::cin >> key >> name; roster[key] = name; } for (const auto& [key, name] : roster) std::cout << key << ' ' << name << '\n';}
Cmain.c · 29 줄
#include <stdio.h>#include <stdlib.h>struct Entry { int key; int order; /* 몇째로 들어왔나: 같은 번호면 나중 것이 이긴다 */ char name[13];};static int by_key_then_order(const void *pa, const void *pb) { const struct Entry *a = pa, *b = pb; if (a->key != b->key) return a->key < b->key ? -1 : 1; return a->order - b->order;}int main(void) { static struct Entry e[2000]; int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d %12s", &e[i].key, e[i].name); e[i].order = i; } /* C에는 사전이 없다: 번호 순으로 정렬하고, 같은 번호 묶음의 마지막 것만 쓴다 */ qsort(e, n, sizeof e[0], by_key_then_order); for (int i = 0; i < n; i++) if (i == n - 1 || e[i + 1].key != e[i].key) printf("%d %s\n", e[i].key, e[i].name); return 0;}
Craykonmain.cray · 13 줄
n = 콘솔.줄읽기().수로변환();roster = 사전();반복 (i = 0; i < n; i++){ p = 콘솔.줄읽기().공백제거().나누기(); roster[p[0].수로변환()] = p[1];}keys = roster.열쇠목록;keys.정렬();각각 (k 에서 keys){ 콘솔.쓰기(k + " " + roster[k]);}