오늘날짜 입력: Ctrl + ;
'Coding > Tip' 카테고리의 다른 글
| [DOSBOX] 창 크기 조절 방법 (0) | 2023.01.27 |
|---|---|
| [Android studio] 사용 팁 (0) | 2020.04.13 |
| 사무직을 위한 Git 활용 법 (0) | 2018.10.27 |
오늘날짜 입력: Ctrl + ;
| [DOSBOX] 창 크기 조절 방법 (0) | 2023.01.27 |
|---|---|
| [Android studio] 사용 팁 (0) | 2020.04.13 |
| 사무직을 위한 Git 활용 법 (0) | 2018.10.27 |
기차표 예매를 위하여 줄을 섰을 때, 이들 중 생일이 같은 사람이 존재 할 확률은 얼마일까?
계산을 해보면, 23명 이상 일 때 부터 50%가 넘어가고, 57명이 넘어가면 99%가 넘어간다.


파이썬으로 짜보면 아래와 같다.
import matplotlib.pyplot as plt
prev = 1
result = [0]
for m in range(57):
prev = prev * (365-m)/365
result.append(1-prev)
x = [ n for n in range(len(result))]
plt.scatter(x, result)
plt.axvline(x=23, color='RED', linestyle='-', linewidth=0.2)
plt.axhline(y=0.5, color='RED', linestyle='-', linewidth=0.2)
plt.show()

| [PyTorch] CUDA 설치기 (0) | 2022.02.21 |
|---|---|
| [Python/C] 휴대폰 패턴의 가지수 (0) | 2021.02.21 |
| [Python] 1^1 + 2^2 + ... + 10000^10000 의 결과 중 끝 50자리 출력하기 (0) | 2021.01.17 |
오픈 챗에서 누구나 다 해보는 "별 그리기" 문제를 물어 보길래, 한 번 짜봤다.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char star[] = "*****";
for (int i = 0; i < strlen(star); i++) {
printf("%s\n", &star[strlen(star)-i-1]);
}
return 0;
}
chobocho@Chobocho-Mint:~/github/cpp_study/src/sandbox$ ./a.out
*
**
***
****
*****| [ChatGPT에게 묻다] Fast sqrt 함수 (0) | 2023.02.26 |
|---|---|
| Stack과 Heap (0) | 2021.02.25 |
| [C] Binary search (0) | 2020.12.06 |
1. Stack과 Heap 영역에 변수 생성 시간 테스트
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_COUNT 1000000
void do_nothing_test() {
clock_t start = clock();
for (int i = 0; i < MAX_COUNT; i++)
;
printf("Empty: %f\n", ((float)(clock()-start)/CLOCKS_PER_SEC));
}
void stack_create_test() {
clock_t start = clock();
for (int i = 0; i < MAX_COUNT; i++) {
int arr[10] = { 0, };
}
printf("Stack: %f\n", ((float)(clock()-start)/CLOCKS_PER_SEC));
}
void heap_create_test() {
clock_t start = clock();
for (int i = 0; i < MAX_COUNT; i++) {
int *arr = malloc(sizeof(int)*10);
free(arr);
}
printf("Heap: %f\n", ((float)(clock()-start)/CLOCKS_PER_SEC));
}
int main(int argc, char **argv) {
do_nothing_test();
stack_create_test();
heap_create_test();
return 0;
}
결과
chobocho@Chobocho-Mint:~/github/cpp_study/src/memory$ ./a.out
Empty: 0.003636
Stack: 0.003976
Heap: 0.015938| 별 그리기 (0) | 2021.06.08 |
|---|---|
| [C] Binary search (0) | 2020.12.06 |
| Quick sort (0) | 2017.07.13 |

인터넷에서 4개의 점 이상을 지나는 휴대폰 패턴의 가지수는 모두 몇 가지인가 라는 문제롤 보고 파이썬으로 풀어 보았다.
0: 9
1: 56
2: 320
3: 1624
4: 7152
5: 26016
6: 72912
7: 140704
8: 140704
4-9 patterns count: 389112
작성코드는 아래와 같다
import time
import math
def is_valid(used_pattern, stack, max_point):
if len(stack) < max_point:
return 0
checked_point = [False] * 9
checked_point[stack[0]] = True
for i in range(1, len(stack)):
prev_x = stack[i-1] % 3
prev_y = math.floor(stack[i-1] / 3)
cur_x = stack[i] % 3
cur_y = math.floor(stack[i] / 3)
"""
0 1 2
3 4 5
6 7 8
아래와 같은 이동한 경우,
이동시 가운데 점이 기존 패턴에 포함 되지 않은 경우
유효 하지 않다.
0 <-> 2 | 0 <-> 6 | 0 <-> 8
2 <-> 8 | 6 <-> 8 | 2 <-> 6
1 <-> 7 | 3 <-> 5
예)
0 -> 1 -> 0 -> 2 : OK
0 -> 2 : Not OK
유효하지 않은 경우를 판단하기 위하여
각 버튼의 위치를 (y, x)로 나타내면 (0,0) ... (2,2) 까지이다.
0 -> 2 => (0,0) -> (0, 2)
0 -> 6 => (0,0) -> (2, 0)
여기서 문제 경우의
두 좌표의 합을 구하면 x, y가 모두 2의 배수가 된다.
그래서 아래와 같이 이동 전후의 좌표의 합이 모두 2의 배수가 되는 경우에서
Not OK 경우만 걸러 주면 된다.
0 -> 1 -> 0 -> 2 : OK
0 -> 2 : Not OK
"""
if ((prev_x + cur_x) % 2 == 0) and ((prev_y + cur_y) % 2 == 0):
mid_x = math.floor((prev_x + cur_x) / 2)
mid_y = math.floor((prev_y + cur_y) / 2)
if checked_point[mid_y * 3 + mid_x] == False:
return 0
checked_point[stack[i]] = True
return 1
def check_pattern(used_pattern, stack, max_point):
if len(stack) > max_point:
return 0
result = is_valid(used_pattern, stack, max_point)
for p in range(0, 9):
if used_pattern[p]:
continue
used_pattern[p] = True
stack.append(p)
result = result + check_pattern(used_pattern, stack, max_point)
stack.pop()
used_pattern[p] = False
return result
def main():
used_pattern = [False] * 9
stack = []
result = []
for max_point in range(1, 10):
result.append(check_pattern(used_pattern, stack, max_point))
for c in range(0, len(result)):
print ("{0}: {1}".format(c, result[c]))
print("4-9 patterns count:", sum(result[3:]))
if __name__ == '__main__':
start_time = time.time()
main()
print('\n', time.time() - start_time)
위 코드를 C로 바꾸면 아래와 같다.
#include <stdio.h>
int stack_idx;
int stack[9] = {0, };
int is_valid(int used) {
int checked = 0;
if (stack_idx < 4) {
return 0;
}
checked |= 1 << stack[0];
for (int i = 1; i < stack_idx; i++) {
int prev_x = stack[i-1] % 3;
int prev_y = stack[i-1] / 3;
int cur_x = stack[i] % 3;
int cur_y = stack[i] / 3;
if (((prev_x + cur_x) % 2 == 0) &&
((prev_y + cur_y) % 2 == 0)) {
int mid_x = (prev_x + cur_x) / 2;
int mid_y = (prev_y + cur_y) / 2;
int pos = mid_y*3 + mid_x;
if (!(checked & (1 << pos))) {
return 0;
}
}
checked |= (1 << stack[i]);
}
return 1;
}
int check_pattern(int used) {
int result = 0;
if (stack_idx == 10) {
return 0;
}
result = is_valid(used);
for (int i = 0; i < 9; i++) {
if (used & (1 << i)) {
continue;
}
stack[stack_idx++] = i;
result += check_pattern(used | (1 << i));
--stack_idx;
}
return result;
}
int main(int argc, char **argv) {
printf("%d\n", check_pattern(0));
return 0;
}| 생일 문제 (0) | 2021.06.21 |
|---|---|
| [Python] 1^1 + 2^2 + ... + 10000^10000 의 결과 중 끝 50자리 출력하기 (0) | 2021.01.17 |
| [Python] 폴더 안의 파일 이름 검색하기 (0) | 2020.10.28 |
Youtube에서 3D 프로그래밍 관련 괜찮은 자료가 있어서 정리를 해 둡니다.
"高校数学とJavaScriptだけ。FPSの作り方 #1【ゲームプログラミング】【ゲーム開発】"
라는 제목의 강의 입니다. 강의 내용을 압축해 두어서, 생략이 많네요;;;
| [Javascript] 좋은 글 링크 모음 (0) | 2021.10.16 |
|---|---|
| [Javascript] 자바스크립트 테트리스 만들기 (Javascript Tetris 만들기) (0) | 2020.09.23 |
| [Javascript] 안드로이드 테트리스 만들기 (Android Tetris 만들기) (2) | 2020.09.10 |
인터넷 커뮤티니에서 본 모대학 수학문제를 풀어 보았다.
약간 변경해서, 1^1 + 2^2 + ... + 10000^10000 의 결과 중 끝 50자리를 출력하는 형식으로 바꿔보았다.
from multiprocessing import Pool
import time
MAX_COUNT = 10**50
def mypower(num):
result = 1
for i in range(num):
result = result * num
if result < MAX_COUNT:
continue
result = result % MAX_COUNT
return result
def get_sum(num):
assert num > 0
numbers = [i for i in range(1, num+1)]
assert len(numbers) == num
pool = Pool(processes=4)
return sum(list(pool.map(mypower, numbers))) % MAX_COUNT
if __name__ == '__main__':
start_time = time.time()
print(get_sum(10000))
print(time.time() - start_time)
16026394753230301057223656223127837280816237204500
3.0160417556762695| [Python/C] 휴대폰 패턴의 가지수 (0) | 2021.02.21 |
|---|---|
| [Python] 폴더 안의 파일 이름 검색하기 (0) | 2020.10.28 |
| [Pygame] Paper Plane Game 만들기 (0) | 2020.08.25 |
이진검색 설명:
ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%EA%B2%80%EC%83%89_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
이진 검색 알고리즘 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. 처음 중간의 값을 임의의 값으로 선택하여,
ko.wikipedia.org
#include <stdio.h>
#include <assert.h>
/*
* high must be length of arr -1
* /
int binary_search(int value, int low, int high, int* arr) {
while (low <= high) {
int mid = (low+high)/2;
if (arr[mid] == value) {
return mid;
} else if (arr[mid] < value) {
low = mid+1;
} else {
high = mid-1;
}
}
return -1;
}
/*
* high must be length of arr -1
* /
int binary_search_recursive(int value, int low, int high, int *arr) {
if (low > high) return -1;
int mid = (low + high) / 2;
if (arr[mid] == value) {
return mid;
} else if (arr[mid] < value) {
return binary_search_recursive(value, mid+1, high, arr);
} else {
return binary_search_recursive(value, low, mid-1, arr);
}
}
void test() {
int number[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int arr_size = (int) sizeof(number)/sizeof(int);
assert(binary_search(11, 0, arr_size-1, number) == 11);
assert(binary_search(2, 0, arr_size-1, number) == 2);
assert(binary_search(12, 0, arr_size-1, number) == -1);
assert(binary_search_recursive(11, 0, arr_size-1, number) == 11);
assert(binary_search_recursive(2, 0, arr_size-1, number) == 2);
assert(binary_search_recursive(12, 0, arr_size-1, number) == -1);
}
int main(int argc, char **argv) {
test();
return 0;
}
| Stack과 Heap (0) | 2021.02.25 |
|---|---|
| Quick sort (0) | 2017.07.13 |
| Bit 연산 정리 (0) | 2016.08.20 |
GetFileList : 폴더 안의 파일 이름 검색 앱

Source code:
github.com/chobocho/GetFileList
chobocho/GetFileList
Get file list. Contribute to chobocho/GetFileList development by creating an account on GitHub.
github.com
Download:
| [Python] 1^1 + 2^2 + ... + 10000^10000 의 결과 중 끝 50자리 출력하기 (0) | 2021.01.17 |
|---|---|
| [Pygame] Paper Plane Game 만들기 (0) | 2020.08.25 |
| [Python][AI] XOR 예제 (0) | 2020.08.03 |
자바스크립트로 테트리스를 만들어 보았습니다.
1) Play 해보기 (크롬만 지원합니다.)
사용키 : 방향키, 스페이스 (블록 아래로 내리기), Ctrl (Hold), S (Start / Resume), P (Pause)
www.chobocho.com/game/tetris/tetris.html
Chobocho's Tetris
www.chobocho.com
2) Source code
github.com/chobocho/JsTetris/tree/master/src/app/src/main/assets
chobocho/JsTetris
Javascript tetris. Contribute to chobocho/JsTetris development by creating an account on GitHub.
github.com
3) UML

| [Javascript] 3D programming 기초 링크 (일본어) (0) | 2021.02.13 |
|---|---|
| [Javascript] 안드로이드 테트리스 만들기 (Android Tetris 만들기) (2) | 2020.09.10 |
| Javascript로 그림판 만들기 (자바스크립트로 그림판 만들기) - 009 (2) | 2020.01.13 |