728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript 

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

코드


function solution(priorities, location) {
    let max;
    let count = 0;

    while(true) {
        max = Math.max(...priorities); //우선순위가 제일 높은 수 저장
        let first = priorities.shift(); //우선순위 배열의 제일 앞 요소를 빼내기

        if (first !== max) priorities.push(first); //제일 앞 요소가 max값이 아니면 push를 통해 우선순위 배열의 제일 마지막으로 보내기
        else { //제일 앞 요소가 max값이면
            count++; //내가 찾는게 몇 번째로 출력되는지 반환하기 위해 +1씩 해주기
            if (location === 0) return count; //위의 과정을 반복하다가 내가 찾는 것이 제일 앞 요소가 되었을때, 계속 +1 해오던 count 반환
        }
        location--; //내가 찾는 요소가 제일 앞 요소가 될 때까지 location 줄여나가기

        if (location === -1) location = priorities.length - 1; //location을 줄여나가다가 idx가 0보다 작아지게 되면 배열의 가장 끝 idx로 보내기
    }
}

 

후기


  • 우선 이 문제는 처음에 제시된 배열의 순서를 지켜야 하기 때문에 정렬을 해서는 안된다. 어떻게 순서를 유지하며 max값을 찾고, 내가 원하는 요소의 위치를 찾을 수 있을까 고민하다가 스택/큐 문제답게 자바스크립트에서 제공하는 shift(), push() 함수를 적절하게 사용하면 나름 쉽게 풀 수 있는 문제였다
  • 이 문제를 통해 알게된 건 자바스크립트의 배열 내 최대값, 최소값 찾는 법으로 Math.min(), Math.max() 함수를 사용한다는 것이다
  • 사용법 : Math.max.apply(null, 배열이름) or Math.max(...배열이름) >> 두가지 방법으로 사용가능하다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/42885?language=javascript 

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

 

코드


function solution(people, limit) {
    let boat = 0;
    let left = 0; //무게 배열에서 제일 큰 무게
    let right = people.length - 1; //무게 배열에서 제일 작은 무게

    people.sort((a,b)=>(b-a)); //무게 순으로 내림차순하고
    while (left < right) {
        if (people[left] + people[right] > limit) left++; //제일 큰 무게 + 제일 작은 무게 > limit 이면 두 명이 같이 보트에 못 탄다는 의미니까 다음 진행을 위해 left++시키고 boat++ 해주기
        else { //limit보다 같거나 작으면 같이 보트에 탈 수 있는 거니까 다음 진행을 위해 left++, right-- 진행 해주고 boat++ 해주기
            left++;
            right--;
        }
        boat++;
    }
    if (left == right) boat++; //마지막으로 남아있는 사람이 있다면 마지막으로 그 사람을 태우기 위한 boat++ 해주기
    return boat;
}

 

후기


  • 문제 이해 : 한 구명보트에는 최대 2명이 탈 수 있고, limit을 넘으면 안 된다. (limit까지는 가능) 모든 사람을 다 태우기 위해 필요한 최소한의 구명 보트 개수를 return 하라
  • 다른 분의 풀이를 조금 참고했는데, 그리디 문제인데 마치 퀵 정렬처럼 left, right를 조절하여 중간으로 만나게 하는 방식이 인상적이었고 그리디 문제를 풀이할 때 이런 방법으로도 풀이할 수 있구나를 배웠다!
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12941?language=javascript 

 

코딩테스트 연습 - 최솟값 만들기

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱

programmers.co.kr

 

코드


function solution(A,B){
    let acc = 0;
    A = A.sort((a,b)=>(a-b)); //1 2 4 배열 하나는 오름차순 정렬
    B = B.sort((a,b)=>(b-a)); //4 4 5 나머지 하나는 내림차순 정렬
    for (let i=0; i<A.length; i++) {
        acc += A[i]*B[i]; //각 index별 숫자들을 곱한 값을 누적
    }
    return acc;
}

 

후기


  • 규칙만 찾으면 쉽게 풀 수 있는 Level2 문제였다!
  • 마지막 for문은 reduce() 함수를 이용했으면 더 좋았겠다
728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12918?language=javascript 

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr

 

코드


function solution(s) {
    if (s.length !== 4 && s.length !== 6) return false;
    else return (s.match(/[^0-9]/g) === null) ? true : false;
}

 

후기


  • match() 함수는 찾고자 하는 문자가 없으면 null을 반환한다

+ Recent posts