알고리즘 머리가 안돌아갑니다. ㅎ 혹시 쉽게 풀 수 있는 알고리즘이 있을까요?

알고리즘 머리가 안돌아갑니다. ㅎ 혹시 쉽게 풀 수 있는 알고리즘이 있을까요?

QA

알고리즘 머리가 안돌아갑니다. ㅎ 혹시 쉽게 풀 수 있는 알고리즘이 있을까요?

본문

문제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

1935251410_1588676568.0876.png

안녕하세요??

 

이미 채택된 답변이 있지만

 

파이썬으로 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 님께서 딕셔너리를 이용하여 저보다 훨씬 간결하고 파이써닉한 방법을 설명해주셨네요 :)

 

https://studyforus.com/index.php?document_srl=687025&comment_srl=687141&mid=tipnknowhow#comment_687141

한번 해보고 싶어서 답글 달아봐요 ㅋㅋ


$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]
)

 

이런식으로도 맞는건가요? ㅎ

답변을 작성하시기 전에 로그인 해주세요.
전체 61,332
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT