jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 계수정렬 자바스크립트
  • 대충만든자판 javascript
  • 외벽 점검 javascript
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 리코쳇 로봇 javascript
  • 리액트 프로젝트 디버깅하기
  • 자바스크립트 모듈 시스템
  • safari Date format NaN
  • 덧칠하기 javascript
  • 백준 17406 nodeJS
  • JavaScript
  • 자바스크립트 채팅방 스크롤
  • 백준 자바스크립트 입력 템플릿
  • 13460 javascript nodejs
  • 병합정렬 자바스크립트
  • javascript use strict
  • 자바스크립트 sort는 왜 그모양일까
  • 자바스크립트 이벤트 위임
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 1753 최단경로 javascript
  • safari invalid date error
  • 자바스크립트 배열의 특수함
  • 억억단을 외우자 javascript
  • 프로그래머스 숫자카드나누기 javascript
  • 25632 소수 부르기 게임
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 가사 검색 자바스크립트
  • 자바스크립트 커링
  • fetch 취소하기
  • 퀵정렬 자바스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

DS & Algorithm/baekjoon

[백준] 1182번 부분수열의 합 - JavaScript(NodeJS)

2021. 6. 5. 19:44

문제

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

풀이

정수 N개를 가지고, 모든 부분수열을 구한다.
부분수열 원소들의 합이 S가 되는 부분수열의 개수를 출력한다.

 

N개의 정수를 배열에 받아서 dfs를 실행한다.

 

부분수열을 만족하기 위해서
재귀의 매 단계에서 L번째 정수를 선택하거나, 선택하지 않는 두가지 경우를 모두 조회해보면 된다.

 

코드

const sol = (input) => {
  const [N, S] = input[0].split(" ").map(Number);
  input = input[1].split(" ").map(Number);
  let count = 0;

  const pick = [];
  function dfs(L) {
    if (L === N) {
      const sum = pick.reduce((sum, val) => sum + val, 0);
      if (sum === S) count++;
      return;
    }
    pick.push(input[L]);
    dfs(L + 1);
    pick.pop();
    dfs(L + 1);
  }
  dfs(0);

  if (S === 0) count--; // pick이 아무것도 선택하지 않았을 때 sum=0이므로 정답보다 1이 더 크므로, 감소시켜준다.
  return count;
};

// 백준에서 입력을 받는 코드
const input = [];
require("readline")
  .createInterface(process.stdin, process.stdout)
  .on("line", (line) => {
    input.push(line);
  })
  .on("close", () => {
    console.log(sol(input));
    process.exit();
  });

저작자표시 (새창열림)

'DS & Algorithm > baekjoon' 카테고리의 다른 글

[백준] 15658번 연산자 끼워넣기(2) - JavaScript(NodeJS)  (0) 2021.06.07
[백준] 14225번 부분수열의 합 - JavaScript(NodeJS)  (0) 2021.06.05
[백준] 6603번 로또 - JavaScript(NodeJS)  (0) 2021.06.05
[백준] 14889 스타트와 링크 - JavaScript(NodeJS)  (0) 2021.06.04
[백준] 14888번 연산자 끼워넣기 - JavaScript(NodeJS)  (0) 2021.06.04
    'DS & Algorithm/baekjoon' 카테고리의 다른 글
    • [백준] 15658번 연산자 끼워넣기(2) - JavaScript(NodeJS)
    • [백준] 14225번 부분수열의 합 - JavaScript(NodeJS)
    • [백준] 6603번 로또 - JavaScript(NodeJS)
    • [백준] 14889 스타트와 링크 - JavaScript(NodeJS)
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바