가쟤의 해변일기 🐳

JS 프로그래머스 코테 1단계 | 짝수와 홀수, x만큼 간격이 있는 n개의 숫자, 평균 구하기 본문

코딩 테스트 in JS

JS 프로그래머스 코테 1단계 | 짝수와 홀수, x만큼 간격이 있는 n개의 숫자, 평균 구하기

바닷가쟤 2023. 8. 7. 14:51

 

2023.08.07(월)

앞으로 1단계 정답률 높은 문제부터 풀어보려고 한다.

풀어보니까 생각보다 너무 빨리 풀려서 ... 0단계 정답률 낮은 문제와 병행하며 풀어야겠다고 생각했다.

 


Lv. 1  짝수와 홀수

당황했다.. 10초만에 풀었다..

짝수와 홀수

문제는 이러하다.. 0단계 아닌교

function solution(num) {
    if(num % 2 === 0) {
        return "Even"
    } else {
        return "Odd"
    }
}

빠르게 적어버렸는데 1트 성공

보니까 삼항 연산자 + 0은 false인 성질로 짧게 푸신 분도 있었다.

 


Lv. 1  x만큼 간격이 있는 n개의 숫자

x만큼 간격이 잇는 n개의 숫자

이..것도 빨리 풀었다. 사실 새롭게 풀어보고 싶어서 while문으로 도전해봤는데 시간 초과로 실패 .. 아마 잘못 적은 것 같다.

function solution(x, n) {
    let answer = []
    let num = 0
    for(let i = 1; i <= n; i++){
        num = x * i
        answer.push(num)
    }
    return answer
}

이 코드로 통과를 했고, 더 간결하게 만들 수 있다.

function solution(x, n) {
    let answer = []
		for(let i = 1; i <= n; i++){
        answer.push(x * i)
    }
    return answer
}

이렇게 간결하게 고쳤다. (이게 근본 코드라고...)

for문만 계속 쓰는데, Array, fill, map도 쓰고 싶다...

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
  1. Array(n): 길이가 **n**인 배열을 생성한다. 배열의 모든 요소는 초기값으로 **undefined**로 설정된다.
  2. .fill(x): **Array(n)**으로 생성한 배열의 모든 요소를 **x**로 채운다. 이렇게 하면 배열의 모든 요소가 **x**로 설정된다.
  3. .map((v, i) => (i + 1) * v): .map() 메소드는 배열의 각 요소를 순회하면서 주어진 함수를 적용하여 새로운 배열을 생성한다. **v**는 현재 요소의 값이고 **i**는 현재 요소의 인덱스다.예를 들어, **x**가 3이고 **n**이 5인 경우, **Array(5).fill(3)**은 **[3, 3, 3, 3, 3]**을 생성하고, **.map((v, i) => (i + 1) * v)**를 적용하면 **[3 * 1, 3 * 2, 3 * 3, 3 * 4, 3 * 5]**인 **[3, 6, 9, 12, 15]**를 반환한다.
  4. map 메소드는 배열의 길이 **n**에 해당하는 횟수만큼 반복하며, 각 반복에서 **(i + 1) * v**를 반환한다. 여기서 **i + 1**은 1부터 시작하는 순차적인 값이며, **v**는 초기에 설정한 **x**의 값이다.
  5. 최종적으로 map 메소드에 의해 생성된 배열이 함수의 반환값으로 제공된다.

느낀점 

- 챗 gpt 개쩐다... 

- 다른 어려운 메소드도 많이 사용해 봐야겠다.


Lv. 1 평균 구하기

map도 써보려 하고 최대한 for문을 쓰지 않으려고 했다..!!

function solution(arr) {  
    const sum = arr.reduce((acc, cur) => {
        return acc + cur
    }, 0)
    // return sum / arr.length 
}

reduce를 써보려 했으나... 왜 타입 에러가 나는 것인지...??

 

function solution(arr) {
    let number = arr.reduce((acc, cur) => acc + cur, 0)
    return number / arr.length
}

이렇게 정답을 받아낸 코드를 작성했다. reduce는 처음 써보는데 확실하게 뭔지 알게 되었다.

function solution(arr) {
    return arr.reduce((a, b) => a + b, 0) / arr.length
}

같은 코드를 더 간결하게 만들었다. 

왜 에러가 났냐면 reduce에서 return 하는 건 number 변수로 할당이 되는거지 function solution에 할당되는게 아니기 때문이다.

에러가 나는 것은 solution에서 return 하는 값이 없어서 TypeError가 났다.

 

앞으로 요약하고 제출하는 연습을 해보자 !!!!

728x90