[Algorithm/JavaScript] Special Array With X Elements Greater Than or Equal X
LeetCode Weekly Contest Question#1 Review 📓
문제
문제설명
You are given an array nums
of non-negative integers. nums
is considered special if there exists a number x
such that there are exactly x
numbers in nums
that are greater than or equal to x
.
Notice that x
does not have to be an element in nums
.
Return x
if the array is special, otherwise, return -1
. It can be proven that if nums
is special, the value for x
is unique.
예시
제한사항
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 1000
제출답안
//(special number)x가 무엇인지 찾는 문제. x는 x보다 같거나 큰 nums 요소의 '갯수'이면서 요소들을 검사하는 '기준'이 된다.
//x <= nums.length;
//nums.length 부터 시작해서 count-down하며 'x보다 같거나 큰 요소들의 갯수'를 변수에 담는다.
var specialArray = function(nums) {
//조건을 충족하는 요소들을 count 할 변수 선언
//x는 배열의 길이부터 시작해서 카운트다운. passedEl은 조건이 충족될 때마다 1씩 증가.
var x = nums.length;
while (x > 0){
//x의 값이 줄어들 때마다 카운트는 초기화가 되어야 한다!!! 위치주의!!
var passedEl = 0;
for (var i = 0; i <= nums.length; i++){
if (nums[i] >= x){
passedEl++;
}
}
//조건을 충족하면 리턴값 반환. x가 줄어드는 순간과 리턴값이 반환되어야 하는 시점을 생각할 것!!! 위치주의!!!
if (x === passedEl){
return passedEl;
}
x--;
//x가 0으로 줄어들때까지 조건을 충족하지 못하면, -1리턴. x--;이후에 x가 0이 되기 때문에 while문 내부에 위치해야함.
if(x === 0) {
return -1
}
}
}
오늘의 Lesson
if (nums[i] >= x)
조건을 충족하는 요소의 갯수를 세는var passedEl = 0;
가 선언되어야 하는 위치는 for문의 외부이면서 while문의 내부여야한다. 왜냐하면,x
의 값이 줄어들 때마다passsedEl
카운트는 초기화가 되어야하기 때문이다.x--;
를if (x === passedEl)
문 이전에 기재함으로 인해x
와passedEl
의 값이 일치하지 않음에도 불구하고 if문이 실행되는 오류가 생겼다. (ex.passedEl
이 3일 때x
가 4 -> 3으로 먼저 줄어들면 직후에 따라오는 조건if (x === passedEl)
을 충족하게 된다.) 따라서x--;
위치를 if 문 이후로 옮겨 해당 loop의 결과를 먼저 검사한 이후에x
의 값을 변경할 수 있도록 정정했다.- 조건을 충족하는 special 값이 존재하지 않을 경우
-1
을 반환하는 로직if(x === 0)
은while (x > 0)
문 내부 혹은 외부에 모두 위치할 수 있지만, 반드시x--;
이후에 위치해야한다. 그래야만x
가0
로 변경되었을 때(즉, 모든 경우의 수를 검사하고 나서도 조건을 충족하는 special 값이 없을 때) 리턴값-1
을 반환할 수 있다. 여기서 기억해야 할 점은,
if(x === passedEl)
내부의 return값은 return을 만나면 단지 if문만 벗어나는 것이 아니라, 이후에 따라오는 코드들은 무시한 채specialArray
에 값을 반환한다. 따라서if(x === 0)
이 실행되지 않으려면 앞전에서 return을 만나지 않아야 한다. - ❗️반복문에서는 변수선언문의 위치에 따라 결과가 상당히 달라진다. 항상 변수 선언문의 위치에 주의할 것❗️
Author And Source
이 문제에 관하여([Algorithm/JavaScript] Special Array With X Elements Greater Than or Equal X), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@grinding_hannah/AlgorithmJavaScript-Special-Array-With-X-Elements-Greater-Than-or-Equal-X저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)