AtCoder が提供しているABC(AtCoder Beginner Contest)339 のA問題をC++とPythonで解いてみました。ABC339は、2024年2月3日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 TLD(Difficulty : 18)
問題はリンク先をご覧ください。
与えられた文字列の部分文字列を切り出します。AtCoder Problems による Difficulty は 18 でした。
解答案
文字列に含まれる最後のピリオドから末尾までを切り出します。文字列が URL(Uniform Resource Locator)であれば TDL(Top-level domain)を切り出すことになります。
C++ プログラム例(ABC339A)
与えられた文字列の末尾から、ピリオドまで文字列を走査して、そこまでの文字を反転して出力しました。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
string result = "";
for (int i = s.length() - 1; i >= 0; --i) {
if (s[i] != '.') {
result += s[i];
} else {
break;
}
}
reverse(result.begin(), result.end());
cout << result << endl;
return 0;
}
与えられた文字列を先頭から走査して、最後のピリオド以降の文字を出力するプログラムも紹介します。以下となります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int last_index = -1;
for (int i = 0; i < s.length(); ++i) {
if (s[i] == '.') {
last_index = i;
}
}
cout << s.substr(last_index + 1) << endl;
return 0;
}
どちらも AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC339A)
Python 版も基本的な考え方は同じです。末尾から走査するプログラムは以下となります。
"""AtCoder Beginner Contest 339 A"""
s = input()
result = ""
for i in range(len(s) - 1, -1, -1):
if s[i] != '.':
result = s[i] + result
else:
break
print(result)
先頭から走査するプログラムは以下となります。
"""AtCoder Beginner Contest 339 A"""
s = input()
last_index = -1
for i, ch in enumerate(s):
if ch == '.':
last_index = i
print(s[last_index + 1:])
こちらも「AC」と判定されました。
最後に
2回参加できなかったため、久しぶりの参加でした。レートは落ちましたが、変わらず楽しんでいます。
引き続き ABC の問題を紹介していきます。