[백준 15649번, 15650번 / C++] N과 M

2024. 12. 19. 15:25·프로그래밍 공부/백준 (C++)

 

 

 

dfs, 백트래킹, 재귀 를 사용해 푸는 문제이다.

DFS - 깊이우선 탐색으로 수열을 제공받는 길이 M 까지 출력하기 위해서 사용하는 알고리즘

백트래킹 - 해를 찾는 도중, 해가 아니어서 막히면 다시 돌아가서 해를 찾는 방법

재귀 - 함수 내에서 자기 자신을 다시 호출하는 함수



처음에 dfs 함수를 0 을 넣어 호출해

1 2, 1 3, 1 4, 2 1 .... 등등 출력할 수 있도록



재귀함수 탈출조건을 명시해준 후 ( 함수 인풋이 M과 같으면 == 수열의 개수가 M개로 채워지면)

탈출 시에는 벡터에 담아두었던 원소를 전부 출력한다.



탈출조건 만족 못할 시에는 순회 하면서 벡터에 넣어주고 dfs(+1) 만큼 재귀호출 해준다.

 

 

 

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

bool visited[10] = { false };
vector<int> v;

int N, M;


void dfs(int cnt)
{
    if (cnt == M)
    {
        for (auto i : v)
            cout << i << " ";
        cout << '\n';
        
        return;
    }
    else
    {
        for (int i = 1; i <= N; i++)
        {
            if (!visited[i])
            {
                visited[i] = true;
                v.push_back(i);
                dfs(cnt + 1);
                visited[i] = false;
                v.pop_back();
            }
        }
    }

}


int main() {

    cin >> N >> M;
    dfs(0);

    return 0;
}

 

 

15650번

#include <iostream>
#include <vector>


using namespace std;

vector<int> v;

bool visited[10] = { false };

int N, M;

void dfs(int input)
{

    if (input == M)
    {
        for (auto i : v)
        {
            cout << i << " ";
            
        }
        cout << '\n';
        return;
    }
    else
    {
        for (int i = 1; i <= N; i++)
        {
            if (!visited[i])
            {
                if (!v.empty() && i < v.back()) continue;

                visited[i] = true;
                v.push_back(i);

                dfs(input + 1);

                visited[i] = false;
                v.pop_back();



            }
        }
    }
    
        


}

int main() {

    cin >> N >> M;

    

    dfs(0);
 


    return 0;
}

 

'프로그래밍 공부 > 백준 (C++)' 카테고리의 다른 글

[C++ / 백준 10972번] 다음 순열  (0) 2024.12.29
[ C++ / 백준 15663번 ] N과 M (9)  (0) 2024.12.28
[C++ / 백준 14500번] 테트로미노  (0) 2024.12.07
[C++ / 백준 3085번] 사탕 게임  (0) 2024.12.05
[C++ / 백준 11054번] 가장 긴 바이토닉 부분 수열  (0) 2024.11.30
'프로그래밍 공부/백준 (C++)' 카테고리의 다른 글
  • [C++ / 백준 10972번] 다음 순열
  • [ C++ / 백준 15663번 ] N과 M (9)
  • [C++ / 백준 14500번] 테트로미노
  • [C++ / 백준 3085번] 사탕 게임
Rocketbabydolls
Rocketbabydolls
Rocketbabydolls
  • Rocketbabydolls
    With The Lights Out
    Rocketbabydolls
  • 전체
    오늘
    어제
    • 전체글 (182)
      • 프로그래밍 공부 (117)
        • C (16)
        • Jumping into C++ (9)
        • MFC (C++) (1)
        • 자료구조 (1)
        • 알고리즘 (1)
        • 백준 (C++) (74)
        • 핸즈온 머신러닝 2판 (6)
        • Unseen 3기 준비 (4)
        • 원티드 포텐업 게임 개발자 양성과정 2기 (4)
      • 언리얼엔진5 (61)
        • [Part1] 이득우의 언리얼 프로그래밍 (12)
        • [Part2] 이득우의 언리얼 프로그래밍 (2)
        • [Part2 복습] 이득우의 언리얼 프로그래밍 (3)
        • [Part3] 이득우의 언리얼 프로그래밍 (14)
        • [Part4] 이득우의 언리얼 프로그래밍 (0)
        • FPS 게임 1인 프로젝트 (6)
        • 각종 지식 (9)
        • 블루프린트 Paper2D 로 게임 만들기 (14)
        • 팀 프로젝트 (1)
      • 일상 (1)
      • ETC (1)
        • 맥북 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      ue5 절차적 맵 생성
      실전 C프로그래밍 실습문제
      실전C프로그래밍 실습문제
      언리얼엔진5
      핸즈온 머신러닝 2판
      실전C프로그래밍 나중채
      실전 C 프로그래밍
      언리얼엔진 절차적 맵 생성
      실전 C프로그래밍 나중채
      언리얼엔진5 fps 프로젝트
      실전 C프로그래밍
      c++ 17298
      C언어 실습문제
      실전C프로그래밍
      오블완
      c언어
      c++ 16929
      언리얼엔진
      티스토리챌린지
      핸즈온 머신러닝
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    Rocketbabydolls
    [백준 15649번, 15650번 / C++] N과 M
    상단으로

    티스토리툴바