본문 바로가기

프로그래밍/알고리즘

[Ruby] 창작 스도쿠 푸는 알고리즘 이 알고리즘으로 UI를 구현한 Sudoku solver는 http://sunnyholic.com/100 여기 있습니다. C++로 동일하게 작성한 코드는 http://sunnyholic.com/81 입니다.Java로 동일하게 작성한 코드는 http://sunnyholic.com/80 입니다. 빈 칸중 들어갈 수 있는 수의 경우가 제일 적은 칸을 선택하여 수를 삽입한 뒤 재귀적으로 풀고오답이면 백트래킹 하고 정답이 나오면 종료하는 알고리즘 입니다. Sudoku 클래스 메소드1. initialize : 간편하게 행 열 섹터를 순차적으로 순회하기 위해 미리 순회 순서를 찾아놓음.2. find_abl_num rn, cn : rn,cn 칸에 가능한 숫자 셋트 리턴3. find_min_possible : 가장 가능한.. 더보기
[C,C++,Java,JS,Py,Ruby] 로또 번호 생성 초간단 알고리즘 C++11#include #include #include #include using namespace std; int main() { srand((unsigned int) time(NULL)); vector num; for (int i = 1; i 0; i--) swap(&arr[i], &arr[rand() % (i + 1)]);} int main(void) { int num[45], i; srand(time(NULL)); for (i = 0; i < 45; i++) num[i] = i + 1; //1~45로 초기화 random_shuffle(numbers, 45); //모두 섞음 qsort(num, 6, sizeof(int), comp); //앞 6개 숫자만 정렬 for (i = 0; i < 6; i+.. 더보기
디시인사이드 자동 로그인 북마클릿 마지막줄 값을 원하는 값으로 수정하고 북마크 주소로 추가하여 사용하면 됩니다. 더보기
[Javascript] 스도쿠 푸는 프로그램 C++로 작성되어 있는 동일한 알고리즘을 토씨 하나 안틀리고 그대로 자바스크립트로 옮긴 프로그램 입니다. Stand by Solve Set Load Clear Show process(slow) 알고리즘과 소스코드 참조는 C++는 http://sunnyholic.com/81 이 포스트를 Java는 http://sunnyholic.com/80 이 포스트를 봐주세요. 동일한 알고리즘을 토씨 하나 안틀리고 그대로 자바스크립트로 옮긴 프로그램 입니다. 텍스트 입력란에 공백 문자로는 0과 점(.)만 인정합니다. 또한 유일한 답을 가진 정상적인 문제에 대해서만 풀이를 보장합니다. 실행파일로 다운로드(윈도용) 더보기
[HTML5/Javascript] canvas 바늘시계 결과물 소스 코드var canvas = document.getElementById('canvas');var width = canvas.width;var height = canvas.height;var g = canvas.getContext('2d');window.requestAnimFrame = (function() { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60); };})();var clockObj = function() { this.rad =.. 더보기
자바스크립트 정규표현식 사용법 정규표현식 객체 생성2가지 방식이 있습니다.new RexExp(패턴 문자열,모드 문자열)이런식으로 문자열로 정규 표현식을 생성하는 방법이 있고/패턴/모드 이런식으로 코드로 생성하는 방법이 있습니다. var regex= /[가-힣]/g;var regex= new RegExp('[가-힣]','g');이 부분은 정규표현식을 써넣는 부분입니다. var regex= /[가-힣]/g;var regex= new RegExp('[가-힣]','g');이 부분은 모드 플래그 부분입니다. 패턴 매칭하기regex.test("alpha알파 beta베타")생성해논 정규표현식 객체입니다. regex.test("alpha알파 beta베타")패턴을 매칭 시킬 문자열 입니다. 패턴이 매칭 될 경우 true를 반환합니다. 패턴 매칭 문자.. 더보기
[C++ STL] 동적 2차원 배열 사용법(vector) //int arr[6][5] 배열 선언. 0으로 값 초기화vector arr(6, vector(5, 0)); //값 삽입int serial = 0;for (int i = 0; i < 6; i++) for (int j = 0; j < 5; j++) arr[i][j] = serial++; //값 출력for (vector vec : arr) { for (int n : vec) printf("%3d ", n); cout 부분 시프트 연산자 >>랑 구분해 주기 위해 중간에 공백을 꼭 넣어주세요. 사용벡터는 연속된 공간에 할당하는 자료형이기 때문에 일반 배열처럼 사용해도 됩니다.맨 위 코드에 값 삽입 부분을 보시면 됩니다. C++11 이상 배열 생성 초간편 방법vector arr({ vector( { 0, 1, 2.. 더보기
[C++] 구간트리 (Binary Indexed Tree) - 구간 최대,최소값 struct IndexedTree { vector tree; int size; IndexedTree(int n, int *arr) : tree(4 * n, 987654321) { //넉넉하게 4*n 사이즈 배열 생성, 초기값 지정 size = 1; while (size right) return 987654321; //초기값 if (left == nodeLeft && right == nodeRight) return tree[node]; int mid = (nodeLeft + nodeRight) / 2; return min(query(left, right, node * 2, nodeLeft, mid), query(left, right, node * 2 + 1, mid + 1, nodeRight)); } vo.. 더보기
THE100YEARSWAR 백년전쟁 풀이 문제: https://algospot.com/judge/problem/read/THE100YEARSWAR 문제 해석 1,2번 왕을 제외한 모든 귀족은 종신 관계를 가지고 있으며 입력에서 종신관계의 순서는 임의의 순서로 들어오나 결국에는 1,2번을 루트로 한 두개의 트리가 완성된다. 들어오는 순서가 임의이기 때문에 입력을 받으면서 전처리는 불가능하다. 모든 입력을 다 받고 난 뒤에 전처리를 행해야 한다. 한 귀족이 배신을 하면 그 귀족 아래의 모든 귀족이 배신을 한다. 즉 그 배신하는 귀족을 루트로하는 부분트리내 모든 노드가 배신을 한다. 입력 받기 예를 들면 귀족이 총 19명이고 1~19번 귀족=노드의 입력이 이런 형태로 들어왔다고 합시다. 이러한 트리 구조를 받을 수 있는 자료형을 먼저 만들어야 합니다.. 더보기
[C++] 펜윅트리 (이진 인덱스 트리) - 구간합 구해주는 트리 struct FenwickTree { vector tree; FenwickTree(int n) : tree(n + 1) {} inline int sum(int pos) { ++pos; int ret = 0; while (pos > 0) { ret += tree[pos]; pos &= (pos - 1); } return ret; } inline void add(int pos, int val) { ++pos; while (pos < (int) tree.size()) { tree[pos] += val; pos += (pos & -pos); } }}; 사용법생성자 FenwickTree fenwickTree(n) : n은 들어갈 노드의 개수int sum(int pos) : 0번~pos번째까지의 합을 구해준다.(내.. 더보기