アルゴリズムのアウトプット
ということで、
レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】@e869120さん
AtCoder で水色コーダー、つまりレーティング 1200 を少ない問題数で達成するために、茶色コーダー・緑コーダーにとって適切な教育的良問を 100 問集めました。
こちらの記事の初中級者が解くべき過去問精選 100 問
をPHPで解いていきます。
<?php
$s = trim(fgets(STDIN));
$number = trim(fgets(STDIN));
$numToArr = str_split($number);
$ansList = [];
$firstList = [];
$secondList = [];
for ($i = 0; $i < $s; $i++) {
//1桁目の組み合わせが既に出てきている場合は飛ばす
if(in_array($numToArr[$i], $firstList)) {continue;}
$firstList[] = $numToArr[$i];
for ($j = $i + 1; $j < $s; $j++) {
//1桁目、2桁目の組み合わせが既に出てきている場合は飛ばす
if ($i >= $j) {continue;}
if(in_array($numToArr[$i] . $numToArr[$j], $secondList)) {continue;}
$secondList[] = $numToArr[$i] . $numToArr[$j];
for ($k = $j + 1; $k < $s; $k++) {
if ($j >= $k) {continue;}
$ansList[] = $numToArr[$i] . $numToArr[$j] . $numToArr[$k];
}
}
}
既に出てきたものをチェックするために、配列を持っておくことで計算量をへらす。