AtCoder

ABC329 B問題(Next)を解く

AtCoder_ABC329_B

AtCoder が提供しているABC(AtCoder Beginner Contest)329 のB問題をC++とPythonで解いてみました。ABC329は、2023年11月18日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

B問題 Next(Difficulty : 20)

問題はリンク先をご覧ください。

ABC329 B問題 Next

重複がない2番目に大きな数字を出力します。AtCoder Problems による Difficulty は 20 でした。

解答案

C++ プログラム例(ABC329B)

ソートして最大値を求めます(12行目)。最大値と異なる、次に大きな数字を result に格納します(16、17行目)。以下が、C++プログラムとなります。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<int> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}
	sort(a.begin(), a.end(), greater<int>());

	int result;
	for (int i = 1; i < n; ++i) {
		if (a[i] != a[0]) {
			result = a[i];
			break;
		}
	}
	cout << result << endl;

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC329B)

Python 版も基本的な考え方は同じです。以下となります。

"""AtCoder Beginner Contest 329 B"""
n = int(input())
a = list(map(int, input().split()))
a.sort(reverse=True)

result = 0
for i in range(1, n):
    if a[i] != a[0]:
        result = a[i]
        break
print(result)

リスト処理を以下のように書くこともできます(6行目の右辺)。こちらの方が Python らしいのかもしれません。

"""AtCoder Beginner Contest 329 B"""
n = int(input())
a = list(map(int, input().split()))

m = max(a)
result = max([a[i] for i in range(n) if a[i] != m])
print(result)

こちらも「AC」と判定されました。

最後に

今回は、B問題も解きやすい難易度でした。

引き続き ABC の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA