[프로그래머스/코딩테스트 모음/Javascript] 4

TED·2023년 8월 18일
0

Javascript CodingTest

목록 보기
4/63
post-thumbnail
  • 항해중 본격적으로 알고리즘 문제 풀이 주차가 시작됬다. 페어 프로그래밍으로 진행될거라 많이 걱정이다
    왜냐면 난,,,너무 모르니까 ㅠㅠㅠㅠ 파이팅이다

<오늘의 문제>

🌟 = 내가 생각한 난이도있는 풀이
1. 평균 구하기
2. 자릿수 더하기 1레벨
3. 나머지가 1이 되는 수 찾기 1레벨
4. x만큼 간격이 있는 n개의 숫자 1레벨
5. 자연수 뒤쥐어 배열로 만들기 1레벨

1. 평균 구하기

function solution(arr) {
    var answer = 0;
    let sum = 0;
    
    for (let i = 0; i < arr.length; i++){
     sum = sum + arr[i];
    }
    return answer = sum / arr.length;
}
  • 나의 풀이
    : 처음에 sum = 0 값을 주는걸 잊지말자 초기값이 있어야 작동한다고 !
    결국 sum 은 arr 배열 요소의 모든값을 더한 값이 되므로, 배열의 길이 arr.length로 나누면 평균값이 나온다.!
function solution(arr) {
    var answer = 0;
    return arr.reduce((a, b) => a + b) / arr.length;
 // return arr.reduce((sum누적값, current현재값) => sum + current) / arr.length;
}
  • 다른 사람 풀이
    : reduce는 모르는 메서드였는데, 배열요소의 누적값과 현재값을 더해서 누적값을 갱신하는 기능이다.
function solution(arr) {
    var answer = 0;
    arr.forEach((a) => {
        answer += a;
    })
    return answer / arr.length;
}
  • 다른 사람 풀이
    : forEach가 많이 어색한 편이라 참고용 !

2. 자릿수 더하기

function solution(n)
{
    var answer = 0;
    let m = String(n);
    
    for (let i = 0 ; i < m.length ; i++){
        answer = answer + parseInt(m[i]); // Number() 도 가능
    }
    return answer;
}
  • 나의 풀이
    : 일단 n이 자연수이기 때문에 for문에서 length를 구하기 위해 let m = String(n); 변수 m에 자연수 n를 문자열로 선언한다.
    그리고, 결국 요소값을 더한값이(숫자값이) 도출되야하기 때문에, parseInt(m[i])로 문자열을 숫자형으로 바꿔줘서 출력한다.
    Number() 도 가능 !!
function solution(n) {
    var answer = 0;
    n = n.toString().split('')
    n.forEach((a) => {
        answer += Number(a)
    })
    return answer;
}
  • 다른 사람 풀이
    : forEach 가 훨씬 편한 것 같다;;;
function solution(n){
    return n.toString().split('').reduce((prev, cur) => prev + parseInt(cur), 0);
    // parseInt로 문자열에서 숫자열로 바꿔준다. cur * 1 도 * 연산자가 형변환을 해주니 사용가능.
}
  • 🌟🌟다른 사람 풀이🌟🌟
    : 같은 맥락으로 자연수 n를 문자형으로 바꿔주고, .split('') 를 사용하여 문자열 배열의 요소를 ' ' 따옴표로 감싸서 분리한다.
    그리고 .reduce() 로 더한값을 출력한다. cur또한 숫자형으로 바꿔줘야 값이 도출되니 parseInt()로 감싸주거나,
    cur에 * 1를 하여 연산자를 이용한 형변환을 시켜준다. 초기값은 0으로 지정한다 -> (0, cur) 이라는 소리다.
    이렇게 표현식이 한 줄일 경우 =>다음 중괄호 {}를 생략하고 바로 결과값을 반환할 수 있다.

3. 나머지가 1이 되는 수 찾기

function solution(n) {
  let answer = 0;
  for (let i = 0; i < n; i++) {
      if(n % i == 1) {
          answer = i;
          break;
        }
    }
        return answer;
}
  • 나의 풀이
    : break문은 실전에선 처음 사용해봤는데, 최소값을 위한 장치로 이용됬다. n의 값이 나머지 1이 나오는경우가 여러개 나올 수 있으므로, i=0으로 시작되서 늘어나니 가장처음 조건에 맞는 값이 나오면 break문으로 닫히면서 최소값이 출력된다.
function solution(n) {
    var answer = 0;
    
    for(let x = 0; x <= n; x++) {
        if (n % x == 1) return x;
    }  
}
  • 다른 사람 풀이
    : 같은 맥락인데, if문 이후에 바로 return 을 넣으니 당연히 최소값으로 출력된다

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

function solution(x, n) {
    var answer = []; // 결과를 저장할 빈 배열
    for (let i = 1; i <= n; i++) {
        answer.push(x*i) // x에 i를 곱한 값을 결과 배열에 추가
    }
    return answer; // 완성된 결과 배열을 반환
}
// x = 2
// i = 1 -> 2
// i = 2 -> 4
// i = 3 -> 6
// i = 4 -> 8
// i = 5 -> 10
// .push()는 직접 배열에 값을 추가하는 기능

// n개 만큼 지니는 리스트라는 의미에서 length를 구해야되는지 헷갈림
  • 나의 풀이
    : 주석으로 설명을 많이 채워뒀는데, .push()를 이용해서 배열에 직접 값을 추가하는걸 잘 생각해내보자.

5. 자연수 뒤집어 배열로 만들기

function solution(n) {
    var answer = [];
    let m = String(n).split('').reverse();
    
    for(let i = 0; i < m.length; i++){
        answer.push(parseInt(m[i]));
    }
    return answer;
}
  • 나의 풀이
    : 자연수n인 상태에 각 자리 원소를 숫자로 가지는 배열을 만들어서 뒤집어 주는 문제였는데, string()을 통해서 문자열로 바꿔주고, split('')로 각각의 원소를 하나하나 빼서 분리한 다음 .reverse로 뒤집어주었다. push 할 때는 숫자형으로 변환뒤에 !
function solution(n) {
    var answer = [];
    n = n.toString().split('')
    n.forEach((n) => {
        answer.push(Number(n))
    })
    return answer.reverse();
}
  • 다른 사람 풀이
    : forEach가 너무 쓰고 싶어서 계속 참조중이다 ..! reverse()는 마지막에 넣어도 되지만, 처음부터 지정할수 있다면 명시해두는게 더 내 스타일같다. 일단 Number()parseInt()의 짧은 차이점은 소주점을 가져오고, 안가져오고 차이정도로만 알고싶다..
profile
컴맹 개발 입문자

0개의 댓글