이 영역을 누르면 첫 페이지로 이동
hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

페이지 맨 위로 올라가기

hoonDEV

BOJ 15650 - N과 M (2) 문제풀이

  • 2020.04.03 19:18
  • 알고리즘/문제풀이

문제를 읽고 이해하기

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 고른 수열은 오름차순이어야 한다.

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

재정의와 추상화

> BOJ 15649 - N과 M (1) 문제풀이

N과 M (1) 문제에서 '고른 수열이 오름차순이여야 한다.'라는 조건 하나만 더 추가된 문제이다. 따라서 result 벡터에 원소를 추가하는 부분에 오름차순인지 아닌지 확인하는 코드 2줄만 추가하면 된다.

result가 비어 있지 않은 상태에서 원소를 추가하려고 할 때, 추가하려고 하는 원소가 result 벡터의 맨 뒤에 있는 원소보다 크지 않을 경우(작거나 같을 경우) 원소를 추가하지 않고 다음 숫자로 넘어간다.

코드 작성

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

int n, m;
bool check[9];
vector<int> result;

void dfs(int count) {
    if (count == m) {
        for (int idx = 0; idx < m; idx++)
            cout << result[idx] << ' ';
        cout << '\n';
        return;
    }

    for (int j = 1; j <= n; j++) {
        if (!check[j]) {
            if (!result.empty() && result.back() >= j)
                continue;
            result.push_back(j);
            check[j] = true;
            dfs(count + 1);
            result.pop_back();
            check[j] = false;
        }
    }
}

int main() {
    cin.sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    dfs(0);
    return 0;
}

'알고리즘 > 문제풀이' 카테고리의 다른 글

BOJ 7576 - 토마토 문제풀이  (0) 2020.04.05
BOJ 9663 - N-Queen 문제풀이  (0) 2020.04.03
BOJ 15649 - N과 M (1) 문제풀이  (0) 2020.04.03
BOJ 11054 - 가장 긴 바이토닉 부분 수열  (0) 2020.04.03
BOJ 1992 - 쿼드트리 문제풀이  (0) 2020.04.03

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • BOJ 7576 - 토마토 문제풀이

    BOJ 7576 - 토마토 문제풀이

    2020.04.05
  • BOJ 9663 - N-Queen 문제풀이

    BOJ 9663 - N-Queen 문제풀이

    2020.04.03
  • BOJ 15649 - N과 M (1) 문제풀이

    BOJ 15649 - N과 M (1) 문제풀이

    2020.04.03
  • BOJ 11054 - 가장 긴 바이토닉 부분 수열

    BOJ 11054 - 가장 긴 바이토닉 부분 수열

    2020.04.03
다른 글 더 둘러보기

정보

hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

  • hoonDEV의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그

카테고리

  • 분류 전체보기 (91)
    • 일상 (13)
      • 후기 (1)
      • 계획 (11)
    • 공지사항 (1)
    • 알고리즘 (54)
      • 문제풀이 (53)
      • 이론 (1)
    • 공부 (19)
      • React (0)
      • Angular (5)
      • Java (3)
      • C, C++ (3)
      • JavaScript (6)
      • WEB (2)
    • 디자인 (1)
      • UI, UX (1)
    • 개발 (0)
      • boom (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • dp
  • javascript
  • 백준
  • 그리디
  • 문제풀이
  • es6
  • 이분탐색

나의 외부 링크

정보

훈개발자의 hoonDEV

hoonDEV

훈개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 훈개발자. Designed by Fraccino.

티스토리툴바