개발맛/알고리Thm

자바스크립트 배열 중복 요소 찾기

MINAMIN 2020. 7. 4. 21:26

 

 

 

 

 

▶ 문제 :

arr 배열이 있다.

이 때 배열 arr의 요소 중 다른 요소의 일부에 포함되거나 중복되는 경우

true를 리턴해야 하며, 중복되는 요소가 없다면 false를 리턴해야 한다.

 

예시 :

1. arr = ['', '바지', '원피스', '홍차', '티셔츠'] 이면 true를 리턴

   ( '티' 원소가 '티셔츠' 원소의 일부에 해당되기 때문에 true 리턴 )

 

2. arr = ['슈퍼', '마트', '슈퍼컴퓨터', '문방구', '하이마트'] 이면 true를 리턴

   ( '슈퍼' 원소가 '슈퍼컴퓨터' 원소의 일부에 해당되기 때문에 true 리턴 )

   ( '마트' 원소가 '하이마트' 원소의 일부에 해당되기 때문에 true 리턴 )

 

3. arr = ['축구', '배구', '농구', '족구'] 이면 false를 리턴

   ( 하나의 요소가 다른 요소의 일부가 되거나 중복되지 않기 때문에 false 리턴 )

   ( '구' 라는 글자 하나가 다른 요소의 일부이긴 하지만 "완전한 요소 자체" 가 아니기 때문에 중복으로 치지 않음 )

 

 

▶ 해결한 코드 :

var answer  = false;
var data    = ['슈퍼', '마트', '슈퍼컴퓨터', '문방구', '하이마트', '슈퍼'],
    result  = [];

function getData(arr) {
    for(var i = 0; i < arr.length; i++) {
        var value = data[i];
        var chk = 0;

        for(var j = 0; j < data.length; j++) {
            if(data[j].indexOf(value) != -1) chk++;
        }

        if(chk > 1) {
            console.log("'" + value + "'" + "는 다른 요소의 일부이거나 중복된 값입니다.");
            result.push(value);
        }
    }

    return result;
}

answer = getData(data).length > 0 ? true : false;
console.log("결과: " + answer);

 

▶ 결과 :

 

▶ 다른 방법 : 

(찾으면 작성하기...)