some vs every

꼬질맨·2025년 3월 13일

JavaScript

목록 보기
2/7
post-thumbnail

25.03.13

프로그래머스 '특별한 이차원 배열 2'를 하다가 헷갈려서 정리하는 some 과 every

Q)
let arr = [[5,192,33],[192,72,95],[33,95,999]]
// arr 의 전체가 arr[i][j] = arr[j][i] 맞으면 1 하나라도 아니면 0

A)
// 오답
return +arr.some((items, xIdx)=>{
    return items.some((item, yIdx)=> {
        if(yIdx !== xIdx) return arr[yIdx][xIdx] === item
        return true
    });
})

해당 문제에서 물어보는 것은 이차원 배열의 대칭이 맞냐 아니냐인데, i===j 인 경우는 값이 다를 수 없어서 true 로 return했다.

여기에서 every를 쓰느냐 some 을 쓰느냐가 갈릴 수 있다.

둘 다 배열의 각 요소를 검사하는 메서드지만 동작방식에 차이가 있다.

some 은 적어도 하나의 요소가 주어진 조건을 만족하면 true를 반환한다. > 만족하는 요소를 찾으면 종료하고 true
every 는 모든 요소가 주어진 조건을 만족하면 true를 반환한다. > 만족하지 않는 요소를 찾으면 종료하고 false

처음 풀었던 문제가 오답인 이유가 some 은 만족하는 요소를 찾으면 true 여서 '==='이면 처음부터 true 니까 바로 종료했기 때문에 '!==' 로 찾았으면 정답이 되었을 것 같다.

A)
// every 로 바꾼 버전
return +arr.every((items, xIdx)=>{
    return items.every((item, yIdx)=> {
        if(yIdx !== xIdx) return arr[yIdx][xIdx] === item
        return true
    });
})

// some 을 사용한 버전
return +!arr.some((items, xIdx)=>{
    return items.some((item, yIdx)=> {
        if(yIdx !== xIdx) return arr[yIdx][xIdx] !== item
        return false
    });
})
profile
주니어개발자

0개의 댓글