売れた 商品の 番号を 重複なしで数える
- 配列の処理
- 問題 06
- やさしい
- 目安 11 分
1 日に
本番の
入力は
問題
ある
売れた
入力の形式
N
a_1 a_2 ... a_N1 行目に
出力の形式
K + 1 行を
制約
- N は、
1 以上 200000 以下の整数です - a_i は、
1 以上 1000000000 以下の整数です
入力と出力の例
例 1
番号 3 が
入力
6 5 3 5 1 3 5
出力
3 1 1 3 2 5 3
例 2
同じ
入力
4 10 9 10 10
出力
2 9 1 10 3
ヒント
まだ開いていません
付箋は 3 枚。下の段ほど答えに近づきます
ヒント 2
ヒント 3答えに近い
全部の
先に
解答
辞書で
Python
Python
import sys
data = sys.stdin.read().split()
n = int(data[0])
items = list(map(int, data[1:1 + n]))
counts = {}
for item in items:
counts[item] = counts.get(item, 0) + 1
lines = [str(len(counts))]
for item in sorted(counts):
lines.append(f"{item} {counts[item]}")
print("\n".join(lines))JavaScript
JavaScript
const data = require("fs").readFileSync(0, "utf8").split(/\s+/).filter(Boolean).map(Number);
const n = data[0];
const items = data.slice(1, 1 + n);
const counts = new Map();
for (const item of items) {
counts.set(item, (counts.get(item) ?? 0) + 1);
}
const keys = [...counts.keys()].sort((x, y) => x - y);
const lines = [String(keys.length)];
for (const key of keys) lines.push(`${key} ${counts.get(key)}`);
console.log(lines.join("\n"));計算量
時間は O(N + K log K) で、
遅いx not in uniq や JavaScript の includes と filter は 1 行で
よく ある間違い
- JavaScript で
sort()に比べる 関数を 渡さず、 番号が 文字の 順 (1、 10、 9) に並ぶ - 1 行目の
種類の 数 K を 書き忘れる、 または 記録の 数 N を 書いてしまう - 種類ごとの
個数を、 重複なしの 並びを 作った あとで countやfilterで数え直し、 そこで O(N × K) かかる - 番号を
数に 直さず 文字のまま 並べ替えて、 例 2 のように 9 と 10 の 順が逆になる
解答を動かした版 Python 3.12.14Node.js 22.23.4確認日 2026/10/31