프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 내일배움단
  • JavaScript
  • 내일배움카드
  • 스파르타코딩클럽
  • Til
  • 자바스크립트
  • 자바스크립트비트마스크
  • 국비지원
  • 투포인터알고리즘
  • 자바스크립트알고리즘
  • 2023 인프콘 후기
  • 비트마스크
  • nomadcoder
  • 모던자바스크립트딥다이브
  • 알고리즘
  • nomadcoders
  • 코딩프로젝트
  • vanilaJS
  • MySQL
  • 코드스테이츠

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘] 최대점수 구하기(DFS)

2022. 3. 16. 15:02

문제

이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.)

입력설명

첫 번째 줄에 문제의 개수N(1<=N<=20)과 제한 시간 M(10<=M<=300)이 주어집니다.
두 번째 줄부터 N줄에 걸쳐 문제를 풀었을 때의 점수와 푸는데 걸리는 시간이 주어집니다.

출력설명

첫 번째 줄에 제한 시간안에 얻을 수 있는 최대 점수를 출력합니다.

입력예제

5 20
10 5
25 12
15 8
6 3
7 4

//출력 : 41

풀이

function solution(m, ps, pt){         
    let n = ps.length;
    let max = Number.MIN_SAFE_INTEGER;

    function DFS(L,sumTime,sum){
        if(sumTime>m) return;
        if(L===n){
            max = Math.max(sum,max);
        }
        else{
            DFS(L+1,sumTime+pt[L],sum+ps[L]);
            DFS(L+1,sumTime,sum);
        }
    }

    DFS(0,0,0);

    return max;
}

let ps=[10, 25, 15, 6, 7];
let pt=[5, 12, 8, 3, 4]
console.log(solution(20, ps, pt));

이진트리 DFS 탐색

  • 한 배열의 부분집합은 해당 원소를 '포함한다' or '포함하지 않는다' 의 두가지 경우를 가진 이진트리로 볼 수 있다.
  • 따라서 호출하는 재귀함수를 두 가지 경우 (포함하고 계산, 포함하지 않고 계산) 로 나눌 수 있다.
  • 이 때 재귀는 스택에 쌓여있던 함수가 다시 실행되며 복귀주소로 돌아와, 다음 재귀를 실행하며 반복되는 것. 
  • 원소의 개수가 많아질수록 시간이 오래 걸린다. 따라서 이럴 경우 동적 프로그래밍 방식의 풀이가 적절하다.

 

저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘] 순열구하기  (0) 2022.03.19
[알고리즘] 중복순열 구하기  (0) 2022.03.16
[알고리즘] 합이 같은 부분집합(DFS)  (0) 2022.03.09
[알고리즘] 아나그램 (해쉬)  (0) 2022.02.22
[알고리즘] 학급회장 (해쉬)  (0) 2022.02.22
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘] 순열구하기
    • [알고리즘] 중복순열 구하기
    • [알고리즘] 합이 같은 부분집합(DFS)
    • [알고리즘] 아나그램 (해쉬)
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바