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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae
DS & Algorithm/baekjoon

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

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
하루에 한 걸음씩

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.