백준 #1182 부분 수열의 합

2024. 2. 12. 23:41·알고리즘

난이도 : 실버2
소요시간 :  58분
사용한 풀이법 : 백트래킹


풀이 과정

1. 현재 원소 위치와 총합을 매개변수로 하는 func()정의
2. 현위치 변수가 n과 같고, 총합이 s와 같은 경우에 카운트 후 리턴
3. 조건 미 충족 시, func() 재귀
4. 재귀는 다음 위치의 수를 더하는 경우와, 더하지 않는 경우 두가지로 진행
5. S가 0일 때, 모두 더하지 않은 경우를 카운트에서 제외시켜야 함.

작성 코드

#include <iostream>
using namespace std;

int n, s;
int arr[30];
int cnt = 0;
void func(int cur, int tot){
  if(cur == n){
    if(tot == s) cnt++;
    return;
  }
  
  func(cur+1, tot+arr[cur]);
  func(cur+1, tot);
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> s;
  for(int i = 0; i < n; i++)
    cin >> arr[i];
  func(0, 0);
  if(s == 0) cnt--;
  cout << cnt;
}

 

 

피드백

이건 재귀를 써야하는 문제다.. 생각은 들지만 암만 떠올려도 안되서 결국 정답 코드 염탐했다.
근데 그 마저도 이해하는데 10분은 걸린 내 자신이 싫지만 그래도 뭐 계속 해야지 어쩌겠나..
다음 문제는 스스로 풀어보자.
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

백준 #1932  (0) 2024.03.03
백준 #1260  (0) 2024.03.03
백준 #10026 적록색약  (1) 2024.02.11
백준 #1012 유기농 배추  (0) 2024.02.11
백준#1697 숨바꼭질  (0) 2024.02.04
'알고리즘' 카테고리의 다른 글
  • 백준 #1932
  • 백준 #1260
  • 백준 #10026 적록색약
  • 백준 #1012 유기농 배추
70_0ewd
70_0ewd
내가 보려고 적는 나의 공부 기록
  • 70_0ewd
    Seung's Learning Record
    70_0ewd
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • DE (2)
      • Dev Tool (29)
        • Flutter (5)
        • AWS (8)
        • Django (7)
        • Spring boot (9)
      • 프로그래밍 (30)
        • C++ (0)
        • JAVA (6)
        • SQL (13)
        • Python (8)
        • WEB (3)
      • 알고리즘 (26)
      • CS (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Flutter
    Python
    select
    stl
    AWS
    group by
    프로그래머스
    백준
    백트래킹
    너비 우선 탐색
    DP
    웹 스크래핑
    C++
    파이썬
    SQL
    BFS
    delete
    Java
    JOIN
    공룡책
    Queue
    스택
    자바
    깊이 우선 탐색
    DFS
    큐
    django
    플러터
    데브코스
    heap
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
70_0ewd
백준 #1182 부분 수열의 합
상단으로

티스토리툴바