[ 문제 ]
문제는 간단하다. 모든 각 요소들이 이전까지의 요소들의 합보다 더 크면 true, 하나라도 같거나 작다면 false를 return한다.
여기서 주의해야할 점은, arr[i]는 자연수가 아닌 '정수'라는 것.
즉 -의 값이 있을 수도 있다!(이걸 간과하여 처음에 테스트 하나를 통과하지 못했다.)
[ 풀이 ]
나의 로직은 다음과 같다.
1/ 이전 까지의 요소들의 합에 대한 변수를 선언한다.
2/ 반복문을 돌면서 해당 인덱스의 값이 이전 요소들의 합보다 작으면 false를 리턴한다.
만약 크면 이전까지의 요소값에 더한다.
function superIncreasing(arr) {
let all = arr[0] //이전 요소들의 값을 all이라는 변수에 선언하고, 0번째 인덱스를 할당한다.
for(let i = 1; i < arr.length; i++){ //반복문은 1부터 시작하고, 하나하나 돌면서 all값과 비교한다.
if(arr[i] <= all){ //해당 인덱스 값이 all값보다 작거나 같으면 false 리턴.
return false;
} else {
all = all + arr[i]; //해당 인덱스값이 all보다 크면 기존 all값에 더해준다.
}
} return true; //반복문이 다 돌아도 함수가 종료되지 않으면(return false가 없는경우), true값을 반환한다.
}
처음에 배열의 요소에 -값이 있을 수 있다는 걸 생각하지 못하고 all 변수에 0을 할당했더니
실제 true를 리턴해야 하는 경우에도 false가 나와 테스트를 통과하지 못했다...!
function superIncreasing(arr) { //arr = [-2247, 1093, 1064]
let all = 0;
for(let i = 0; i < arr.length; i++){
if(arr[i] <= all){ //-2247 < 0
return false;
} else {
all = all + arr[i];
}
} return true;
}
내가 이전에 작성한 코드를 보면, 왜 굳이 arr[0]과 arr[1]을 먼저 비교하였는지 잘 모르겠다...
다행이다...점점 발전하고 있다!
function superIncreasing(arr) {
let result = arr[0];
if(arr[0] >= arr[1]){
return false;
} else {
for(let i = 2; i < arr.length; i++){
result = result + arr[i-1];
if(arr[i] <= result){
return false;
}
} return true}}
[ 레퍼런스 ]
내가 작성한 코드와 거의 흡사하다. :)
'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글
16_isIsogram (0) | 2022.02.25 |
---|---|
15_modulo (0) | 2022.02.24 |
11_removeExtremes (0) | 2022.02.18 |
10_insertDash (0) | 2022.02.18 |
09_ABCheck (0) | 2022.02.16 |