일전에 뭐 게임 회사에서 본 간단한 퀴즈 테스트 입니다.
0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.
sample inputs: 0123456789 01234 01234567890 6789012345 012322456789
sample outputs: true false false true false
PHP로 짜봤습니다.
function zero($var) {
return $var!=0;
}
$input = "0123456789 01234 01234567890 6789012345 012322456789";
$input_arr = explode(" ",$input);
foreach($input_arr as $str) {
$digits = array_fill(0,10,1);
for($i=0; $i<strlen($str); $i++) {
$digits[$str[$i]] -= 1;
}
$filtered = array_filter($digits, "zero");
echo (($filtered)?"false":"true")." ";
}
$input = "0123456789 01234 01234567890 6789012345 012322456789";
$output = array();
foreach(explode(" ",$input) as $item){
$aItem = array_count_values(str_split($item));
$chk = 0;
for($i=0;$i<=9;$i++) if(isset($aItem[$i]) && $aItem[$i]==1) $chk++;
$output[] = (count($aItem) == 10 && $chk == 10) ? 'true' : 'false';
}
echo sprintf("sample inputs: %s",$input);
echo "\n";
echo sprintf("sample outputs: %s",join(" ",$output));
PHP
$str = '0123456789 01234 01234567890 6789012345 012322456789';
$chk = implode(range(0, 9));
$arr = [];
foreach (explode(' ', $str) as $k => $v) {
$tmp = str_split($v);
sort($tmp);
$arr[] = $chk === implode($tmp) ? "true" : "false";
}
$result = implode(" ", $arr);
print_r($result); // true false false true false
풀이 작성