目的
採用選考の一環でコーディングテストを実施する際に、
Track Testというオンラインプラットフォームを使って
テストを実施する会社が最近は多いようです。
自分も最近の転職活動で2度ほど受検したのですが、
慣れ親しんでいたLeetCodeとはまた少し違った形式だった
ので1回目の受験時は戸惑って無駄に時間を使ってしまいました。
そこで今回は、今後Track Testでコーディングテストを受ける
かもしれない人達向けに、事前に知っておくと役立つもの
について紹介しようと思います。
目次
Track Testとは
Track Testの詳細については、こちらのリンクを参照ください。
tracks.run
LeetCodeとの違い
実際に受検してみて分かった、LeetCodeとの違いとしては
下記のものがありました。
1. 必要なヘッダーファイルをインクルードする
LeetCodeの場合はヘッダーファイルのインクルードをする必要なく
C++のコードを書いてビルドとテストができますが、Track Testの
場合は自分でいちいち必要なヘッダーファイルをインクルードする
必要があります。
日頃からC++のコードを書いてる人なら大した問題ではないかも
しれませんが、LeetCodeと比べるとやはり面倒に感じるので、
そういう違いがある程度に認識はしておくべきかと思います。
2. 入力はテキストベース
LeetCodeでは、単純にアルゴリズムを実行するコードを書くことだけに
集中できますが、Track Testでは各問題においてさまざまなテストケースの
入力が用意されており、それらは全てテキストファイルから読み取られる
仕組みとなっています。
そのため、肝心なアルゴリズムのコードを書く前に、そのテキストファイルから
入力データを抽出して、アルゴリズムへ入力する形に変換する前処理を行う
コードを自分で書く必要があります。
こういうテキストを処理するコードを書き慣れてないと、それだけで
余計な時間を使ってしまうので、それに関して自分が使うの言語の
復習とコーディング練習はしておくと良いでしょう。
テキストから入力データを抽出するC++コード
ここでは、先に述べたようなテキスト入力を処理するのに
役立つC++コードを紹介します。
まずはこちらのように、テキストファイルの各行を指定した文字で
区切り、区切った行をstring配列に格納して出力するコードを
書きます。テキストファイル内には複数行の文字列が書かれており、
それらは' 'のような空白で区切られていることが多いです。
そのため、こういった1行の文字列を指定文字で区切るという処理は
高確率で必要になります。
std::vector<std::string> split(const std::string& str_in, char delim) { std::vector<std::string> elements; std::stringstream stream_in(str_in); std::string item; while (std::getline(stream_in, item, delim)) { if (!item.empty()) { elements.push_back(item); } } return elements; }
そして、上記のコードをmain関数内でこちらのように使います。
int main() { for (std::string line; std::getline(std::cin, line);) { std::vector<std::string> split_line; split_line = split(line, ' '); } }
これは、まず入力されたテキストファイルから、中に書かれた行を
1行ずつ読み出し、それをsplit関数で空白一文字で区切っていく
というものです。
あとは、ここで区切られた各文字を数値に変換するなどして、
アルゴリズムに食わせてやるようにすればオッケーです。
こういう前処理コードは普段書くことが少ないと、いざテストで
書かなきゃいけなくなった際に慌てるので、スムーズに書けるように
日頃から訓練しておきましょう。