[프로그래머스-기초] 조건에 맞게 수열 변환하기 1

JiEun·2023년 5월 26일
0

코테/코플릿

목록 보기
20/56

조건에 맞게 수열 변환하기 1

문제 설명

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

제한사항

1 ≤ arr의 길이 ≤ 1,000,000
1 ≤ arr의 원소의 값 ≤ 100

입출력 예

arr result
[1, 2, 3, 100, 99, 98][2, 2, 6, 50, 99, 49]
입출력 예 설명

입출력 예 #1
1, 3은 50 미만의 홀수 이므로 2를 곱하고, 100, 98은 50 이상의 짝수이므로 2로 나눕니다.
나머지 값들은 변경 조건에 해당하지 않으므로 바꾸지 않습니다.
따라서 [2, 2, 6, 50, 99, 49]를 return 합니다.

💻 내가 작성한 코드

function solution(arr) {
   let result = []
   for(let i in arr){
       if(arr[i] >= 50 && arr[i] % 2 === 0){
           result.push(~~(arr[i] / 2))
       }else if(arr[i] < 50 && arr[i] % 2 !== 0){
           result.push(arr[i] * 2)
       }else{
           result.push(arr[i])
       }
   }
    return result
}

🛠️ 리팩토링 하기

function solution(arr) {
   return arr.map((el) => {
       if(el >= 50 && el % 2 === 0){
          return ~~(el / 2)
       }else if(el < 50 && el % 2 !== 0){
           return el * 2
       }
       return el
   })  
}

🤔 헤맸던 부분

function solution(arr) {
   let result = []
   for(let i in arr){
       if(arr[i] >= 50 && arr[i] % 2 === 0){
           result.push(~~(arr[i] / 2))
       }else if(arr[i] < 50 && arr[i] % 2 !== 0){
           result.push(arr[i] * 2)
       }
   }
    return result
}

초반에 작성했던 코드 이다.

계속 왜 안되는거지? 조건도 맞는데 이랬다.
그렇다 두 조건이 맞지 않을 경우 그냥 요소를 반환해하는데
그 부분을 작성하지 않아서 해당 값만 들어오지 않는 문제가 있었다.

else{
    result.push(arr[i])
}

두 가지 조건이 맞지 않을 때를 작성해 주니 가볍게 통과 할 수 있었다!

💻 다른 사람이 작성한 코드

function solution(arr) {
    return arr.map(num => {
        if(num >= 50 && !(num % 2)) return num / 2;
        if(num < 50 && num % 2) return num * 2;
        return num;
    })
}

나처럼 map 메서드를 사용하셨지만 좀 더 깔끔하게 작성하쎠서 가져왔다.

홀수인지, 짝수인지 찾고 싶을 때 n % 2 === 0으로 표현 해도 되지만 !(num % 2)이러한 방법도 있다는 점을 깨닳았다.


✏️ 마치며

로직을 어떻게 짜느냐에 따라 나오는 결과 값이 천지차별이다.

왜 안 되는지 고민했던 부분이 정말 사소한 곳이라는 걸 알았을 때 허무하기도 했고

기본적인 부분이 아직도 부족하다는 생각을 들었던 문제였다.

profile
💻 프론트엔드를 목표로 성장 중! (알아봤던 내용 등을 정리하기)

0개의 댓글