배열 갯수 확인 채택완료

[1,1,1,1,0,1,1,0,1,1]

같튼것 끼리의 갯수 확인이 되나요?

4,0,2,0,2

답변 4개

채택된 답변
+20 포인트
Copy
<?php
function count_of_continuous_element($arg, $withzero = true) {
    $arr = [];

 

    $before = current($arg);
    $cnt = 0;

 

    for ($i = 0, $i_cnt = count($arg); $i < $i_cnt; $i++) {
        $v = $arg[$i];
        if ($before == $v) {
            $cnt++;
        } else {
            if ($withzero == false && $before == 0) {
                $cnt = 0;
            }
            $arr[] = $cnt;
            $cnt = 1;
        }
        $before = $v;
    }

 

    if ($withzero == false && $before == 0) {
        $cnt = 0;
    }

    $arr[] = $cnt;

 

    return $arr;
}

 

$arr = [1,1,1,1,0,1,1,0,1,1];

 

$val = count_of_continuous_element($arr);
/*
Array
(
    [0] => 4
    [1] => 1
    [2] => 2
    [3] => 1
    [4] => 2
)
*/

 

$val = count_of_continuous_element($arr, false);
/*
Array
(
    [0] => 4
    [1] => 0
    [2] => 2
    [3] => 0
    [4] => 2
)
*/
?>
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

[1,1,1,1,0,1,1,0,1,1]

같튼것 끼리의 갯수 확인이 되나요?

4,0,2,0,2

==

같은 값을 갖는 원소의 갯수가 아니고

연이어 같은 것이 나오는 것을 코딩(run length coding)하는 거군요.

https://exercism.org/tracks/php/exercises/run-length-encoding/solutions/bf5a7cfe57af4e069d86cc0c972ef3fe

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

Copy
function get_len($array, $index=0, &$result)
{
    if($index >= count($array)) {
        return;
    }

    $start = $array[$index];
    $count = 0;
    for($i=$index; $i<count($array); $i++) {
        if($start == $array[$i]) {
            $index++;
            $count++;
        } else {
            //$index++;
            break;
        }
    }

    array_push($result, $count);
    get_len($array, $index, $result);
}

 

// 사용방법


$arr = [1,1,1,1,0,1,1,0,1,1];
$len = [];


get_len($arr, 0, $len);

var_dump($len);

/*


[4,1,2,1,2]
*/
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

$arr = array_count_values(배열);

위 함수로 개수 확인이 가능합니다.

참고: https://solbel.tistory.com/1672

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

구분지어서 저렇게 갯수를 알아야 해소요
아 부분부분 이군요
저렇게 하려면 별도로 함수를 만들어야 할듯 보입니다.
[code]
$myTest = array(1,1,1,0,1,1,0,0);

foreach($myTest as $myTest_value)
{
echo $myTest_value, "\n";
}
[/code]

이런식으로 연속값을 카운팅 하도록 foreach 문에 넣어 중복된 개수만큼 카운팅 해서 반환해 주는 방식으로 처리하시는 방법으로 적용이 필요할듯 합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고