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

TED·2023년 8월 17일
0

Javascript CodingTest

목록 보기
3/63
post-thumbnail
  • 오늘도 정답률 높은 문제순으로 풀이 시작 ..! 09:00 시작,,!

<오늘의 문제>

🌟 = 내가 생각한 난이도있는 풀이
1. 피자 나눠 먹기 (1)
2. 최대값 만들기
3. 배열 자르기
4. 짝수 홀수 개수
5. 삼각형의 완성조건
6. 배열 뒤집기
7. 특정 문자 제거하기

1. 피자 나눠 먹기 (1)

function solution(n) {
    var answer = 0;
    
    if (n % 7 == 0) {
        answer = Math.floor(n / 7)
    } else if (n % 7 != 0) {
        answer = Math.floor(n / 7) + 1
    }
    
    return answer;
}
  • 내 풀이
    : else if 에 쓴 조건을 if에 먼저 쓰고 그 다음 그냥 else로 식을 기재하지 않고도 끝낼수 있었네..!
function solution(n) {
    return Math.ceil(n / 7)
}
  • 다른 사람 풀이
    : 결국 소수점이 조금이라도 올라간다면 1판 더 시켜야하는건데 올림을 생각못했다! ㅠㅠ
function solution(n) {
    return n % 7 === 0 ? n / 7 : parseInt(n / 7) + 1;
}
  • 다른 사람 풀이
    : 삼항연산자 풀이는 짧은 return값 답안의 문제에 항상 등장하는데 생각이 바로 나진않는다..
    아직 물어 보질 못해서 parseInt을 왜 쓰는지 모르겠네; parseInt는 문자열을 숫자열로 바꿔주는 기능이라고 알고있는데.. 소수점도 없애주는 역할을 하나?
    구글링을 좀 더 해본 결과.. 소수점은 무시하고 출력해주는 기능이 있다는걸 알았다..!

2. 최대값 만들기

function solution(numbers) {
    numbers.sort(function(a, b) {
        return b - a;
    });
    return numbers[0] * numbers[1];
}
  • 나의 풀이
    : sort() 메소드에서 내림차순은 b - a , 오름차순은 a - b 라는 법칙으로 기억하자.
    가끔 내림, 오름이 헷갈리는데 내림은 점점 값이 내려가며 배열된다고 생각하고, 오름은 그반대로 ,,!
    그래서 내림차순값의 인덱스[0] 값이 가장 큰요소인 것 이다..!
function solution(numbers) {
    numbers.sort((a, b) => b - a);
    return numbers[0] * numbers[1];
}
  • 다른 사람 풀이
    보통 대부분이 화살표 함수를 이용하셨는데, 강사님이 화살표함수는 제발 기본식에 익숙해진 뒤 사용하세요!! 라고 하셔서 잘 쳐다도 안봤었다.. 근데 너무 간편해보여서 이제는 써볼까 생각이든다..

3. 배열 자르기

function solution(numbers, num1, num2) {
    var answer = [];
    
  	answer = numbers.slice(num1, num2 + 1);
    
  	return answer;
}
  • 나의 풀이
    : slice() 를 잘 안쓰다가 사용하니까 자꾸 까먹어서 다시 기본정리를 하려고 벨로깅한다,,
    slice(from, to) 인데 to의 값은 포함되지않고 앞에서 멈춘다. 그래서 위 문제엔 +1를 하여 to값까지 포함시켰다.
function solution(numbers, num1, num2) {
    var answer = [];

    for (let i = num1; i < num2+1; i++) {
        answer.push(numbers[i])
    }

    return answer;
}
  • 다른 사람 풀이
    : i 에 num1 값을 주고 num2+1 값보단 작게 조건식을 만들었다.. 그리고 push() i값(배열의요소)이 조건식의 길이만큼 추가되고 전부 충족이됬을때 튕겨져 나오면서 answer값이 완성된다..
    완전히 이 문제만을 위한 코드인데 언젠가 나도 머리속에 떠올리고 싶다..

4. 짝수 홀수 개수

function solution(num_list) {
    var answer = [0, 0];

    for (let i = 0; i < num_list.length; i++) {
        if(num_list[i] % 2 === 0) {
            answer[0]++;
        } else {
            answer[1]++;
        }
    }
	return answer;
}
  • 나의 풀이
    : answer 뒤에 바로 배열에 인덱스값을넣고 ++ 하는건 처음이었는데 어색하네 자주 쓰는걸까...
    var answer = [] 이 처음 기본값이었는데 [0, 0] 으로 바꿔줬다..
function solution(num_list) {
  return [
    num_list.filter((num) => num % 2 === 0).length,
    num_list.filter((num) => num % 2 === 1).length // 2 !== 0 도 사용가능하다! 둘 다 홀수
  ];
}
  • 다른 사람 풀이
    : return 값에 바로 배열을 줬다.. 난 왜 이런 창의성이 없는거지 ㅠㅠㅠ
    배열.filter((요소) => 조건) 주어진 요소를 조건에 맞게 재구성해서 배열한다!
    결국 length가 요소의 개수와 같으니 결과가 도출된다,,!
function solution(num_list) {
    var answer = [0,0];
    // 짝수, 홀수 배열 저장소

    for(let a of num_list){
        // num_list에 있는 배열을 전부 a로 나타내기
        answer[a % 2] += 1
        // answer[a % 2] = answer[a % 2] + 1
    }

    return answer;
}
  • ⭐⭐⭐머리가 터질 뻔 했던 다른 사람 풀이⭐⭐⭐
    : 아주 골머리 터질뻔했다.. 왜냐면
    첫번째 이유 - var answer = [0, 0]를 선언했다고 왜 [0]에 짝수가 들어가고 [1]에 홀수가 들어가는거지??
    하면서 아래 코드를 신경도 안쓰고 생각했다.. 그러고 보니 내풀이에서도 아무생각없이 썼었지..
    결정적인 두번째 이유 - answer[a % 2] += 1 이 부분이었는데 너무 바보였다 식을 풀어서 쓰면..
    answer[a % 2] = answer[a % 2] + 1 이렇게 되는데 answer[a % 2]는 결국 무조건 0 아니면 1의 값을 갖게 되니
    인덱스 안에 0 or 1 와서 answer값이 채워지는거고, a가 num_list의 길이만큼 계속 for문으로 반복해서 들어 오니 짝수가 나오든 홀수가 나오든 계속해서 인덱스값을 뒤에 적은 +1씩 나오는만큼 올려주는것이다.. ㅠㅠ 멍청시치....

5. 삼각형의 완성 조건

function solution(sides) {
    var answer = 0;
    
    sides = sides.sort((a, b) => a - b)
    // sides의 배열 요소를 오름차순 !
    answer = sides[0] + sides[1] > sides[2] ? 1 : 2;
    // 오름차순으로인해 [0]부터 작은값 !
    return answer;

}
  • 나의 풀이
    : answer에 배열값을 바로 코딩했다. 다른 두변의 합과 가장 긴변의 값이 같아도 삼각형이 되지않지만, sides[0] + sides[1] > sides[2] 조건 외의 경우는 전부 2로 출력되는것이지,,! 더 작든 같든
function solution(sides) {
    const [long, a, b] = sides.sort((a, b) => b - a);

    return long < a + b ? 1 : 2
}
  • 다른 사람 풀이
    : 눈에 확 들어와서 좋았다. [long, a, b]로 배열 순서를 지정하고 내림차순을 했는데 오름차순도 상관없다 !
    내림차순으로 인해 b는 인덱스[1] a는 인덱스[2] 자리이기 때문에 자연스럽게 a는 중간길이 b는 가장 짧은길이가 되니 long 변수에는 크게 의미를 두지말고 생각하자 쉽게 생각해라 좀 ! ㅠㅠ

6. 배열 뒤집기

function solution(num_list) {
    return num_list.reverse()
}
  • 나의 풀이
    : 배열의 요소를 하나하나 위치를 바꾸는 silce는 완전히 배열요소를 뒤집기에는 머리가 아파서 해당 기능이 있는 찾다가 알게된 배열.reverse(); 처음에 계속 작동을 안해서 보니까 스펠링을 reverce로 치고 있었다 기억하자 ;;
function solution(num_list) {
    var answer = [...num_list];

    return answer.reverse(); // answer = [...num_list].reverse(); 와 같은 의미 !~!~!~!
}
  • 다른 사람 풀이
    : ...(spread operator) 을 사용하는 이유는 원본배열은 그대로 유지한채 복사하여 사용하기 위해서다. 문제 조건에는 따로 명시된바없지만 다시 기억하기 좋아서 벨로깅~!
function solution(num_list) {
    var answer = [];
    for(let i = num_list.length - 1; i >= 0; i--) {
        answer.push(num_list[i]);
    }
    return answer;
}
  • ⭐잠깐 뇌를 멈추게했던 다른 사람 풀이⭐
    : let i = num_list.length - 1 이 부분이 인덱스[]를 나타내는것이다!! *더 쉽게 말하면 배열의 길이가 5일때, 마지막 요소는 인덱스[4]에 위치한다 !! 그렇기 때문에 length - 1은 배열의 가장 마지막 위치를 나타내줄수있는거지 ! push(num_list[i]) 속에서 !! 사람들은 참 똑똑한거같다,,ㅎ,,

7. 특정 문자 제거하기

function solution(my_string, letter) {
    const answer = my_string.replaceAll(letter, '');
    
    return answer;
}
  • 나의 풀이
    : replaceAll(pattern, replacement) letter의 문자를 공백으로 바꿔줘!
    첫 번째 인수의 일치하는 모든 항목을 두 번째 인수로 바꿔주는 매서드 !
function solution(my_string, letter) {
    
    const answer = my_string.split(letter).join('')
    
    return answer;
}
  • 다른 사람 풀이
    : 이 코드를 가장 많이 사용하셨는데, .split(letter)가 문제의 예시대로 하자면, abcfde 를 ["abc", "de"]로 나눈거다 f는 letter의 값이니까 빠진거고, .join('') 이용하면 요소들을 다시 합칠수있는데 ('') 빈 문자열(empty string)를 f자리에 넣어 공백 없이 요소들을 이어붙이는 역할을 한다.
    혹시나 ' ' 에 space를 넣어주면 space가 문자로 들어가니 조심 ["abc de"] 요렇게!!!
profile
컴맹 개발 입문자

0개의 댓글