C++의 next_permutation 함수를 이용해서 조합을 만들어보자


환경 및 선수조건


next_permutation 함수

기본 사용법

위 링크를 통해서 더 자세하게 볼 수 있지만 간단하게나마 정리하고 갑니다.

example.cpp

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int main (){

	vector<int> v;

	// 1부터 4까지 대입
	for(int i=0; i<4 ;i++){
		v.push_back(i+1);
	}

	// 정렬
	sort(v.begin(), v.end());

	//순열
	do{
		// 출력
		for(int i=0; i<v.size(); i++){
			printf("%d ", v[i]);
		}

		printf("\n");

	}while(next_permutation(v.begin(), v.end()));

	return 0;

}


중복이 있는 원소들의 경우

중복이 있는 원소의 경우 중복인 경우를 제외하고 순열을 만들어줍니다. 즉, 예를 들어서 0 1 1이 있다면 아래와 같은 경우만 순열을 출력해줍니다.

0 1 1
1 0 1
1 1 0

example.cpp

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int main (){

	vector<int> v;

	// 0 1 1 대입
	v.push_back(0);
	v.push_back(1);
	v.push_back(1);

	// 정렬
	sort(v.begin(), v.end());

	//순열
	do{
		// 출력
		for(int i=0; i<v.size(); i++){
			printf("%d ", v[i]);
		}

		printf("\n");

	}while(next_permutation(v.begin(), v.end()));

	return 0;

}


next_permutation을 이용해 조합(Combinataion) 구하기

원리

전체 n개의 원소들 중에서 k개를 뽑는 조합(=nCk)을 구한다면 n개의 벡터 원소에 1k0을 나머지인 n-k개 집어넣어서 순열을 돌리고 1에 해당하는 인덱스만 가져오면 된다.


코드

1부터 6까지의 수 중에서 4개를 뽑아서 조합을 만들어보자.

example.cpp

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int main (){

	// 1부터 6까지 담을 벡터
	vector<int> n;

	// 1부터 6까지 생성
	for(int i=0; i<6; i++){
		n.push_back(i+1);
	}

	// 0과1을 저장 할 벡터 생성
	vector<int> ind;

	// k=4, 4개를 뽑으니까
	int k = 4;

	// k개의 1 추가
	for(int i=0; i<k; i++){
		ind.push_back(1);
	}

	// 2개(6개-2개)의 0 추가
	for(int i=0; i<n.size()-k; i++){
		ind.push_back(0);
	}

	// 정렬
	sort(ind.begin(), ind.end());

	//순열
	do{
		// 출력
		for(int i=0; i<ind.size(); i++){
			if(ind[i] == 1){
				printf("%d ", n[i]);
			}
		}

		printf("\n");

	}while(next_permutation(ind.begin(), ind.end()));

	return 0;

}

구현 결과

3 4 5 6
2 4 5 6
2 3 5 6
...
1 2 3 6
1 2 3 5
1 2 3 4


참고자료

How to fix “Page build warning”(about theme setting) mail from github


Environment and Prerequisite

  • Jekyll
  • YAML


Problem

Sometimes we receive mail of which title is Page build warning from github page.

...
You are attempting to use a Jekyll theme, [Your theme name], which is not supported by GitHub Pages.
...


Solutions

There are two solutions


1. Set to comment or erase theme variable in _config.yml

_config.yml

...
#theme: [Any theme name on above link]
...


2. Add proper theme variable value in _config.yml

Set theme value to one of values in https://pages.github.com/themes/

...
theme: [Any theme name on above link]
...


Reference

“Page build warning”이 나올 때 메일이 오는데 해결 방법을 알아보자


환경 및 선수조건

  • Jekyll
  • YAML


문제

다음 아래와 같이 Page build warning이라는 제목으로 메일이 올 때가 있다.

...
You are attempting to use a Jekyll theme, [Your theme name], which is not supported by GitHub Pages.
...


해결방법

2가지 해결방법이 있는데 아래와 같다.


1. _config.yml에서 theme 변수 주석 처리

공식으로 지원하는 theme가 아니면 아래 변수를 주석 처리해주거나 삭제하면 메일이 오지 않는다.

_config.yml

...
#theme: [Any theme name on above link]
...


2. _config.yml에서 theme 변수에 값 제대로 추가

https://pages.github.com/themes/에 나와있는 테마중 하나로 변수를 변경해줍니다.

_config.yml

...
theme: [Any theme name on above link]
...


참고자료

Update(2019.08.18): Add --unpublished option example to build ‘published: false’ post for local build.

Make jekyll blog post to private(not published)


Environment and Prerequisite

  • Jekyll
  • YAML


Front Matter’s published variable

When we make jekyll post, we always make yaml front matter.

Add published variable to front matter yaml and give value to private.

  • published: true: post to public
  • published: false: post to private

---
layout: post
title: [title post]
...
published: false
...
---

This option makes not to generate specific post. So if this option exist then its post will not be shown in local or server after build. If you’d like to see this post for test in local not in server, then add below option when you build.

  • Add --unpublished option when build
  • jekyll build command could be different depends on user’s system
bundler exec jekyll serve --unpublished
# OR
jekyll serve --unpublished


Reference

업데이트(2019.08.18): --unpublished를 이용해 빌드시 ‘published: false’로 되어있는 포스트도 빌드할 수 있는 방법 추가

블로그 글을 비공개로 해보자


환경 및 선수조건

  • Jekyll
  • YAML


머리말에 있는 published 변수

포스트를 만들 때마다 머리말에 있는 yaml을 설정해줘야 하는데 해당 yaml에서 published 변수를 설정하고 값을 설정해주면 된다.

  • published: true: 포스트 공개
  • published: false: 포스트 비공개

---
layout: post
title: [title post]
...
published: false
...
---

해당 옵션은 사이트가 생성될 때 특정한 포스트가 나타나지 않도록 하는 옵션으로 로컬이나 서버든 빌드를 하게 되면 볼 수 없게됩니다. 만약 로컬에서 테스트 용도로는 보고 싶고 서버에는 비공개로 해서 특정 포스트들을 빌드하고 싶지 않으시다면 아래 옵션을 이용해 로컬에서 빌드하시면 됩니다.

  • 빌드시 --unpublished 추가
  • jekyll을 빌드하는 방법은 사용자에 따라 다르니 참고하시기 바랍니다.
bundler exec jekyll serve --unpublished
# OR
jekyll serve --unpublished


참고자료