본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

14_superIncreasing

[ 문제 ]

문제는 간단하다. 모든 각 요소들이 이전까지의 요소들의 합보다 더 크면 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