본문 바로가기
자기개발/TIL

프로그래머스 js 배열비교하기

by 금화맘 2023. 7. 22.

프로그래머스의 lv0 배열 비교하기를 풀었다.

문제는 모두가 알겟지만 문제는

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

가 주어지고 arr1<arr2 => -1, arr1 > arr2 => 1 arr1 = arr2 => 0 을 반환하게 만들면 되는 문제였다.

문제가 긴거 같아서 처음에 그냥 문제대로 if 문을 써서 해보려고 작성했다.

arr1<arr2 => -1, arr1 > arr2 => 1 먼저 하고 arr1 = arr2일때 arr1과 arr2의 합을 구해서 같으면 0 arr1이 크면 1 arr2가 크면 -1을 반환하도록 로직을 구성했고 코드도 작성했다고 생각했다.

그런데 오늘도 코드실행을 하니 통고했는데 코드제출을 하니 틀렸다고 나왔다.

그래서 코드를 조금씩 조금씩 고쳤는데도 계속 같아서 뭐가 문제일까 하고 다른 사람의 풀이를 검색해봤다. 슥 둘러봤을 때 내 코드랑 비슷한거 같아서 if문이 문제 인가 싶어서 삼항연산자로 풀었다.

삼항연산자로 풀다가 arr1 = arr2일때 코드에서 arr1<arr2 일때 -1 아니면 1을 반환하라고만 되어 있는게 문제였다.

 

 arr1.reduce((a,b)=>a+b,0) > arr2.reduce((a,b)=>a+b,0) ? answer = 1 : answer = -1

이 코드가 문제의 코드였는데 이 코드는 arr1이 크다는 잘 나오지만 arr2가 작다와 같다가 포함된 식이었던 거다. 그래서 자꾸 0이 안나오고 -1이 주구장창 나왔던 거고

그래서 코드를 3가지 다 할 수 있게

 arr1.reduce((a,b)=>a+b,0) > arr2.reduce((a,b)=>a+b,0) ? answer = 1 : arr1.reduce((a,b)=>a+b,0) == arr2.reduce((a,b)=>a+b,0)? answer = 0 : answer = -1

이렇게 바꿔줌으로써 통과 할 수 있었다.

 

그런데 기존의 코드를 다시 보니 arr1 = arr2일때 코드에서 arr1<arr2 일때 answer가  -1 아니면 1을 반환 해야 하는데 둘다 1을 반환하고 있었다. 오마갓이었다... 역시 코드 다시보기를 잘 하자...

 

오늘의 잘 한점 

코드를 찬찬히 다시 읽어보고 미흡한 점을 스스로 찾아냈단 것.

 

오늘의 발전 해야 할 점

문제 낸 대로 코드를 작성해 보기. 예제나 부가적인 설명대로 하는게 아니라 문제의 제일 첫 문장들을 보고 로직을 짜준대로 코드를 작성하기!