目次
- 問題文
- 私の解答
- 解答例
- 私の解答(2回目)
- 学んだこと
- 振り返り
- 一言
問題文
問題文の要約
[x, y]の組み合わせでデータをn個渡すので、yの値でソートせよ。
入力例2
4
2 3
0 4
5 0
3 3
出力例2
0 4
3 3
2 3
5 0
私の解答(1回目:誤りです。)
main.py
num = int(input())
lis = []
for i in range(num):
a =list(map(int, input().split()))
lis.append(a)
lis.sort(reverse=True)
for i in range(num):
for x,j in enumerate(lis[i]):
if x == 0:
print(j, end = " ")
else:
print(j)
[x,y]の組み合わせが複数入る二次元配列の中で、どういう形でソートされてるのかよく分からないまま作成。
reverse=Trueは単純にxを起点として昇順、降順が入れ替わるだけで、yはあくまでソートの順としては2番手。
頭が混乱してenumerateを使ってしまったのですが全く不要。
解答例(コメントアウト部分を追記)
main.py
N = int(input())
kingin = [0] * N
for i in range(N):
[a, b] = [int(j) for j in input().split()]
kingin[i] = [b, a] # 2文字目でソートするため入れ替えている
# print(kingin) # [[3, 2], [4, 0], [0, 5], [3, 3]]
kingin.sort(reverse=True)
# print(kingin) # [[4, 0], [3, 3], [3, 2], [0, 5]]
# 表示は1文字目を前に戻す
for i in range(N):
[a, b] = kingin[i]
print(b, a)
値を格納する際に1,2文字目を入れ替えてからソートする。出力する際には戻すということがポイントですね。
ソートの仕様の理解が深まりました。
私の解答(2回目)
main.py
num = int(input())
squere = []
for i in range(num):
[kin, gin] = map(int, input().split())
a = [gin, kin]
squere.append(a)
squere.sort(reverse=True)
for i in range(num):
[gin, kin] = squere[i]
print(str(kin)+ " " + str(gin))
時間をおいて再挑戦しました。
文字の入れ替えがやや強引です。
が、変数名の名づけなどは問題文に沿った形にしたのでパッと意味が分かる命名が出来たと思います。
学んだこと
- ソートの仕様
- 値の受け取り方、ばらし方
一言
問題文の読み込みのスピードアップ、使い方のバリエーションを増やすことを目指します!