알고리즘 머리가 안돌아갑니다. ㅎ 혹시 쉽게 풀 수 있는 알고리즘이 있을까요? 채택완료
문제1)
$arr = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'C', 'C', 'C'];
무작위로 배열에 알파벳이 저장되어 있다.
다음과 같은 알파벳의 위치를 배열에 저장하시오.
단! 함수를 사용하여 배열의 리턴값을 받으시오.
$result = 함수($arr)
결과값 :
$result[0] = "A, 0, 1, 4, 6";
$result[1] = "B, 2, 3, 5";
$result[2] = "C, 7, 8, 9";
답변 4개
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
한번 해보고 싶어서 답글 달아봐요 ㅋㅋ
</p>
<p>$arr = array('A', 'A', 'B', 'B', 'A', 'B', 'A', 'C', 'C', 'C');
function getItemIdx($arr){
$new_arr = array_unique($arr);
$result = array();
foreach($new_arr as $key => $value){
$new_array = array($value);
$result[] = "[".implode(",",array_merge($new_array, array_keys($arr, $value)))."]";
}
return $result;
}
$result = getItemIdx($arr);
print_r2($result);</p>
<p>
//결과
Array
(
[0] => [A,0,1,4,6]
[1] => [B,2,3,5]
[2] => [C,7,8,9]
)
이런식으로도 맞는건가요? ㅎ
댓글을 작성하려면 로그인이 필요합니다.
스포어의 humit 님께서 딕셔너리를 이용하여 저보다 훨씬 간결하고 파이써닉한 방법을 설명해주셨네요 :)
https://studyforus.com/index.php?document_srl=687025&comment_srl=687141&mid=tipnknowhow#comment_687141">https://studyforus.com/index.php?document_srl=687025&comment_srl=687141&mid=tipnknowhow#comment_687141
댓글을 작성하려면 로그인이 필요합니다.
안녕하세요??
이미 채택된 답변이 있지만
파이썬으로 A~Z까지 일반적으로 작동하도록 작성해봤어요 :)
</p>
<p>def func(list):</p>
<p> res = []</p>
<p> # A~Z까지 리스트 안의 리스트를 생성합니다.</p>
<p> for i in range(26):</p>
<p> res.append([chr(65 + i)])</p>
<p> # 각 문자의 위치를 리스트에 넣습니다.</p>
<p> for idx1, l in enumerate(list):</p>
<p> res[ord(l) - 65].append(idx1)</p>
<p> # 리스트 안의 리스트의 길이가 1인 경우를 제외하여 새 리스트를 생성합니다.</p>
<p> final = [x for x in res if len(x) != 1]</p>
<p> return final</p>
<p> </p>
<p>data = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'C', 'C', 'C']</p>
<p>result = func(data)</p>
<p>print(result)</p>
<p>
결과 : [['A', 0, 1, 4, 6], ['B', 2, 3, 5], ['C', 7, 8, 9]]
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인