정수 배열 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)
이러한 방법도 있다는 점을 깨닳았다.
로직을 어떻게 짜느냐에 따라 나오는 결과 값이 천지차별이다.
왜 안 되는지 고민했던 부분이 정말 사소한 곳이라는 걸 알았을 때 허무하기도 했고
기본적인 부분이 아직도 부족하다는 생각을 들었던 문제였다.