import syslines = sys.stdin.read().split("\n")p = int(lines[0])firsts = []lasts = []out = []for i in range(1, p + 1): words = lines[i].split()[1:] # 문자열 비교(<, min, max)는 글자 코드 순서다 first = min(words) last = max(words) firsts.append(first) lasts.append(last) out.append(first + " " + last)q = int(lines[p + 1])for j in range(q): w = lines[p + 2 + j].strip() page = 0 for i in range(p): if firsts[i] <= w <= lasts[i]: # 파이썬은 비교를 이어 쓸 수 있다 page = i + 1 break out.append(str(page))print("\n".join(out))
JavaScriptmain.js · 32 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const p = Number(lines[0]);const firsts = [];const lasts = [];const out = [];for (let i = 1; i <= p; i++) { const words = lines[i].trim().split(" ").slice(1); // 문자열끼리 <는 코드 순서다(Math.min은 문자열에 쓸 수 없다) let first = words[0]; let last = words[0]; for (const w of words) { if (w < first) first = w; if (w > last) last = w; } firsts.push(first); lasts.push(last); out.push(first + " " + last);}const q = Number(lines[p + 1]);for (let j = 0; j < q; j++) { const w = lines[p + 2 + j].trim(); let page = 0; for (let i = 0; i < p; i++) { if (firsts[i] <= w && w <= lasts[i]) { page = i + 1; break; } } out.push(String(page));}console.log(out.join("\n"));
TypeScriptmain.ts · 34 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const p: number = Number(lines[0]);const firsts: string[] = [];const lasts: string[] = [];const out: string[] = [];for (let i = 1; i <= p; i++) { const words: string[] = lines[i].trim().split(" ").slice(1); // 문자열끼리 <는 코드 순서다(Math.min은 문자열을 받지 않는다) let first: string = words[0]; let last: string = words[0]; for (const w of words) { if (w < first) first = w; if (w > last) last = w; } firsts.push(first); lasts.push(last); out.push(first + " " + last);}const q: number = Number(lines[p + 1]);for (let j = 0; j < q; j++) { const w: string = lines[p + 2 + j].trim(); let page: number = 0; for (let i = 0; i < p; i++) { if (firsts[i] <= w && w <= lasts[i]) { page = i + 1; break; } } out.push(String(page));}console.log(out.join("\n"));
JavaMain.java · 40 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int p = Integer.parseInt(br.readLine().trim()); String[] firsts = new String[p]; String[] lasts = new String[p]; StringBuilder sb = new StringBuilder(); for (int i = 0; i < p; i++) { String[] parts = br.readLine().trim().split(" "); // 문자열에는 <가 없다: compareTo가 코드 순서로 견준다 String first = parts[1]; String last = parts[1]; for (int j = 2; j < parts.length; j++) { if (parts[j].compareTo(first) < 0) first = parts[j]; if (parts[j].compareTo(last) > 0) last = parts[j]; } firsts[i] = first; lasts[i] = last; sb.append(first).append(' ').append(last).append('\n'); } int q = Integer.parseInt(br.readLine().trim()); for (int j = 0; j < q; j++) { String w = br.readLine().trim(); int page = 0; for (int i = 0; i < p; i++) { if (firsts[i].compareTo(w) <= 0 && w.compareTo(lasts[i]) <= 0) { page = i + 1; break; } } sb.append(page).append('\n'); } System.out.print(sb); }}
C#Main.cs · 45 行
using System;using System.Text;class Program{ static void Main() { int p = int.Parse(Console.ReadLine().Trim()); string[] firsts = new string[p]; string[] lasts = new string[p]; StringBuilder sb = new StringBuilder(); for (int i = 0; i < p; i++) { string[] parts = Console.ReadLine().Trim().Split(' '); // CompareOrdinal이 코드 순서다(Compare, CompareTo, Min()은 문화권 순서) string first = parts[1]; string last = parts[1]; for (int j = 2; j < parts.Length; j++) { if (string.CompareOrdinal(parts[j], first) < 0) first = parts[j]; if (string.CompareOrdinal(parts[j], last) > 0) last = parts[j]; } firsts[i] = first; lasts[i] = last; sb.Append(first).Append(' ').Append(last).Append('\n'); } int q = int.Parse(Console.ReadLine().Trim()); for (int j = 0; j < q; j++) { string w = Console.ReadLine().Trim(); int page = 0; for (int i = 0; i < p; i++) { if (string.CompareOrdinal(firsts[i], w) <= 0 && string.CompareOrdinal(w, lasts[i]) <= 0) { page = i + 1; break; } } sb.Append(page).Append('\n'); } Console.Write(sb); }}
C++main.cpp · 40 行
#include <algorithm>#include <iostream>#include <string>#include <vector>using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int p; cin >> p; vector<string> firsts(p), lasts(p); for (int i = 0; i < p; i++) { int k; cin >> k; vector<string> words(k); for (auto& w : words) cin >> w; // std::string의 <는 코드 순서다 auto [lo, hi] = minmax_element(words.begin(), words.end()); firsts[i] = *lo; lasts[i] = *hi; cout << firsts[i] << ' ' << lasts[i] << '\n'; } int q; cin >> q; for (int j = 0; j < q; j++) { string w; cin >> w; int page = 0; for (int i = 0; i < p; i++) { if (firsts[i] <= w && w <= lasts[i]) { page = i + 1; break; } } cout << page << '\n'; } return 0;}
Cmain.c · 38 行
#include <stdio.h>#include <string.h>static char firsts[100][16];static char lasts[100][16];int main(void) { int p; if (scanf("%d", &p) != 1) return 1; for (int i = 0; i < p; i++) { int k; char w[16]; if (scanf("%d", &k) != 1) return 1; for (int j = 0; j < k; j++) { if (scanf("%15s", w) != 1) return 1; /* strcmp는 부호만 믿는다: 음수면 앞, 양수면 뒤 */ if (j == 0 || strcmp(w, firsts[i]) < 0) strcpy(firsts[i], w); if (j == 0 || strcmp(w, lasts[i]) > 0) strcpy(lasts[i], w); } printf("%s %s\n", firsts[i], lasts[i]); } int q; if (scanf("%d", &q) != 1) return 1; for (int j = 0; j < q; j++) { char w[16]; if (scanf("%15s", w) != 1) return 1; int page = 0; for (int i = 0; i < p; i++) { if (strcmp(firsts[i], w) <= 0 && strcmp(w, lasts[i]) <= 0) { page = i + 1; break; } } printf("%d\n", page); } return 0;}