알고리즘 머리가 안돌아갑니다. ㅎ 혹시 쉽게 풀 수 있는 알고리즘이 있을까요?
본문
문제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
안녕하세요??
이미 채택된 답변이 있지만
파이썬으로 A~Z까지 일반적으로 작동하도록 작성해봤어요 :)
def func(list):
res = []
# A~Z까지 리스트 안의 리스트를 생성합니다.
for i in range(26):
res.append([chr(65 + i)])
# 각 문자의 위치를 리스트에 넣습니다.
for idx1, l in enumerate(list):
res[ord(l) - 65].append(idx1)
# 리스트 안의 리스트의 길이가 1인 경우를 제외하여 새 리스트를 생성합니다.
final = [x for x in res if len(x) != 1]
return final
data = ['A', 'A', 'B', 'B', 'A', 'B', 'A', 'C', 'C', 'C']
result = func(data)
print(result)
결과 : [['A', 0, 1, 4, 6], ['B', 2, 3, 5], ['C', 7, 8, 9]]
!-->스포어의 humit 님께서 딕셔너리를 이용하여 저보다 훨씬 간결하고 파이써닉한 방법을 설명해주셨네요 :)
한번 해보고 싶어서 답글 달아봐요 ㅋㅋ
$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);
//결과
Array
(
[0] => [A,0,1,4,6]
[1] => [B,2,3,5]
[2] => [C,7,8,9]
)
이런식으로도 맞는건가요? ㅎ
!-->
답변을 작성하시기 전에 로그인 해주세요.