0
0

More than 3 years have passed since last update.

【PHP】初中級者が解くべき過去問精選 100 問を解いてみた【6問目/100】

Posted at

アルゴリズムのアウトプット

ということで、
レッドコーダーが教える、競プロ・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];
        }   
    }
}

既に出てきたものをチェックするために、配列を持っておくことで計算量をへらす。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0