카멜 케이스, 파스칼 케이스, 스네이크 케이스
카멜 케이스(Camel Case) 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 첫 문자는 소문자로 시작하며 띄어쓰기 대신 대문자로 단어를 구분하는 방식 예를 들어, camelCase, sendMessage, phoneNumber 파스칼 케이스(Pascal Case) 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 첫 문자는 모두 대문자로 단어를 표기하는 방식 예를 들어, PascalCase, SendMessage, PhoneNumber 스네이크 케이스(Snake Case) 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 모두 소문자로 표기하고 띄어쓰기 대신 언더바(_)로 표기 예를 들어, snake_case, send_message, phone_number 어퍼 케이스(Upper Ca..
2023.07.03
no image
향상된 for문
장단점 장점 간편한, 가독성 좋은 코드 배열의 인덱스 문제(정해진 인덱스를 넘어버리는 예외 등)를 해결할 수 있다. 단점 인덱스를 사용하지 못한다. 배열이나 자바의 ArrayList 값을 사용할 수 있지만 절대 수정할 수 없다. C / C++ 1차원 배열은 가능하나 다차원 배열에서 적용은 모르겠다.(알고있다면 댓글 남겨주세요) int array[] = {1,2,3,4}; for (int i : array) { cout
2023.02.13
no image
순서도(Flowchart)
순서도 순서도란 미리 정의된 기호와 이 기호들을 연결하는 선을 이용하여 알고리즘이 작동하는 과정을 순서대로 표시하여 논리적인 흐름을 보기쉽게 그림으로 도식화한 것이다. 단말(터미널) 프로그램 흐름의 시작과 종료를 나타냄 데이터 입출력 데이터의 입력과 출력을 나타냄 C++ : cin, cout등 JAVA : print, scanner등 python : print, input 등 준비 프로그램의 초깃값 설정 변수의 초깃값, 기억장소 설정 int a = 4; int b = 3; //////////////// struct sector_mapping_table { public: unsigned long long LSN; //8바이트 2^64 unsigned long long PSN; //8바이트 2^64 }; s..
2023.01.16
no image
BCD 코드와 3초과 코드
BCD코드 BCD코드(Binary Coded Decimal Code)란? BCD코드는 10진수 0(0000)부터 9(1001)까지를 2진화한 코드 표기는 2진수이지만 의미는 10진수 1010부터 1111까지 6개는 사용하지 않음 1~9의 수는 각 2진화 코드를 쓰고, 10이상의 수는 각 자릿수를 1~9의 이진 코드로 표현함 예) 10진수 15를 BCD 코드로 나타내면 0001 0101 -> 1(0001) 5(0101) BCD코드의 연산 계산 결과가 BCD코드를 벗어날 때, 즉, 9(1001)를 초과하는 경우 계산 결과에 6(0110)을 더해준다. EX) 69 + 85를 BCD로 바꾸어 연산한 결과는? 10의 자리와 1의 자리 모두가 9를 초과하므로 계산 결과에 0110 0110을 더해주면 된다. 3초과 ..
2022.12.24
no image
진수, 진법 변환, 보수
[진수] [10진수] 기수가 10인 수 0, 1, 2 ,3, 4, 5, 6 ,7, 8, 9 -> 10개 수로 표현 [2진수] 기수가 2인 수 0, 1 두개의 수로 표현 [8진수와 16진수] [8진수] 0~7까지 8개의 수로 표현 2진수 3자리는 8진수 1자리 2진수에 해당하는 8진수 8진수 0 1 2 3 4 5 6 7 2진수 000 001 010 011 100 101 110 111 [16진수] 0~9, A~F까지 16개의 기호로 표현 2진수 4자리는 16진수 1자리 10진수 0 1 2 3 4 5 6 7 16진수 0 1 2 3 4 5 6 7 2진수 0000 0001 0010 0011 0100 0101 0110 0111 10진수 8 9 10 11 12 13 14 15 16진수 8 9 A B C D E F 2..
2022.11.29
no image
벤포드의 법칙(with 파이썬)
수학 관련 교양과목을 듣다가 과제로 실생활에 있는 수학에 대해 조사 해오라 해서, 얼마 전 유튜브 알고리즘이 나를 벤포드의 법칙으로 이끌어서 주제는 이걸로 정했고, 조사해 보다가 흥미로워서 적어본다. 벤포드의 법칙이란 어떠한 수치데이터에서 아라비아의 숫자 중에서 그 숫자의 앞자리만 놓고 봤을 경우 1부터 9까지 숫자 중 1이 가장 많이 사용된다는 법칙 12412, 252355, 745734, 86264 이렇게 수치 데이터가 있다고 하면, 각 앞자리는 1, 2, 7, 8이다 이렇게 여러개의 데이터를 뽑으면 1~9까지 수중에서 각 숫자가 사용될 확률이 11.11%가 아니라 1이 가장 많이 사용된다는 법칙 그림과 같이 1이 가장 많이 사용되고 9로 갈수록 빈도가 낮아진다. 이를 수식으로 나타내면 식의 결과 값..
2022.11.23

카멜 케이스(Camel Case)

  • 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 첫 문자는 소문자로 시작하며 띄어쓰기 대신 대문자로 단어를 구분하는 방식
  • 예를 들어, camelCase, sendMessage, phoneNumber

 

파스칼 케이스(Pascal Case)

  • 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 첫 문자는 모두 대문자로 단어를 표기하는 방식
  • 예를 들어, PascalCase, SendMessage, PhoneNumber

 

스네이크 케이스(Snake Case)

  • 복수의 단어로 구성된 복합어에서 각 단어를 표기할 때 모두 소문자로 표기하고 띄어쓰기 대신 언더바(_)로 표기
  • 예를 들어, snake_case, send_message, phone_number

 

 

어퍼 케이스(Upper Case)

  • 대문자로만 작성

 

로우어 케이스(Lower Case)

  • 소문자로만 작성

'기타' 카테고리의 다른 글

향상된 for문  (0) 2023.02.13
순서도(Flowchart)  (0) 2023.01.16
BCD 코드와 3초과 코드  (1) 2022.12.24
진수, 진법 변환, 보수  (0) 2022.11.29
벤포드의 법칙(with 파이썬)  (1) 2022.11.23

향상된 for문

ReBugs
|2023. 2. 13. 00:01

장단점

장점

  • 간편한, 가독성 좋은 코드
  • 배열의 인덱스 문제(정해진 인덱스를 넘어버리는 예외 등)를 해결할 수 있다.

단점

  • 인덱스를 사용하지 못한다.
  • 배열이나 자바의 ArrayList 값을 사용할 수 있지만 절대 수정할 수 없다.

 

C / C++

1차원 배열은 가능하나 다차원 배열에서 적용은 모르겠다.(알고있다면 댓글 남겨주세요)

int array[] = {1,2,3,4};
for (int i : array)
{
    cout << i << endl;
}

 

JAVA

1차원 배열

String[] arr = {"0-0","0-1","0-2"};
for(String i : arr) System.out.println(i);
/*
0-0
0-1
0-2
*/

 

다차원 배열

String [][]arr = {
        {"0-0","0-1","0-2"},
        {"1-0","1-1","1-2"},
    };
for(String[] i : arr)
{
    for(String j : i) System.out.println(j);
}
/*
0-0
0-1
0-2
1-0
1-1
1-2
*/

 

Python

1차원 리스트

arr = ["0-0","0-1","0-2"]
for i in arr:
	print(i)
#0-0
#0-1
#0-2

 

다차원 리스트

arr = [["0-0","0-1","0-2"], ["1-0","1-1","1-2"]]
for i in arr:
	for j in i:
		print(j)
#0-0
#0-1
#0-2
#1-0
#1-1
#1-2

'기타' 카테고리의 다른 글

카멜 케이스, 파스칼 케이스, 스네이크 케이스  (0) 2023.07.03
순서도(Flowchart)  (0) 2023.01.16
BCD 코드와 3초과 코드  (1) 2022.12.24
진수, 진법 변환, 보수  (0) 2022.11.29
벤포드의 법칙(with 파이썬)  (1) 2022.11.23

순서도(Flowchart)

ReBugs
|2023. 1. 16. 00:15

 

순서도

순서도란 미리 정의된 기호와 이 기호들을 연결하는 선을 이용하여 알고리즘이 작동하는 과정을 순서대로 표시하여 논리적인 흐름을 보기쉽게 그림으로 도식화한 것이다.

 

 

 

단말(터미널)

프로그램 흐름의 시작과 종료를 나타냄

 

데이터 입출력

데이터의 입력과 출력을 나타냄

C++ : cin, cout등

JAVA : print, scanner등

python : print, input 등

 

준비

프로그램의 초깃값 설정

변수의 초깃값, 기억장소 설정

int a = 4;
int b = 3;

////////////////
struct sector_mapping_table
{
public:
	unsigned long long LSN; //8바이트 2^64
	unsigned long long PSN; //8바이트 2^64
};
struct block_mapping_table
{
public:
	unsigned long LBN; //4바이트 2^32
	unsigned long PBN; //4바이트 2^32
};
Derived_block* area;
sector_mapping_table* S_table;
block_mapping_table* B_table;

 

처리

처리할 내용(명령어의 내용)

ex) 변수 a에 6을 대입한다.

a = 6;

 

판단

비교하는 조건(식)

if (a < b) ? true : false;

 

미리 정의한 처리

함수와 같이 미리 정의한 처리를 말한다.

 

루프

반복을 뜻한다.(반복문)

루프는 두 기호로 이루어져 있는데 두 부분에는 같은 이름을 사용한다.

  • i : 변수명
  • a : 초기값
  • b : 증가값
  • c : 종료값

1부터 n까지 1씩 증가


reference : https://booksr.tistory.com/13

'기타' 카테고리의 다른 글

카멜 케이스, 파스칼 케이스, 스네이크 케이스  (0) 2023.07.03
향상된 for문  (0) 2023.02.13
BCD 코드와 3초과 코드  (1) 2022.12.24
진수, 진법 변환, 보수  (0) 2022.11.29
벤포드의 법칙(with 파이썬)  (1) 2022.11.23

BCD 코드와 3초과 코드

ReBugs
|2022. 12. 24. 15:25

BCD코드

BCD코드(Binary Coded Decimal Code)란?

  • BCD코드는 10진수 0(0000)부터 9(1001)까지를 2진화한 코드
  • 표기는 2진수이지만 의미는 10진수
  • 1010부터 1111까지 6개는 사용하지 않음

1~9의 수는 각 2진화 코드를 쓰고, 10이상의 수는 각 자릿수를 1~9의 이진 코드로 표현함

예) 10진수 15를 BCD 코드로 나타내면 0001 0101 -> 1(0001) 5(0101)

 

BCD코드의 연산

계산 결과가 BCD코드를 벗어날 때, 즉, 9(1001)를 초과하는 경우 계산 결과에 6(0110)을 더해준다.

EX) 69 + 85를 BCD로 바꾸어 연산한 결과는?

10의 자리와 1의 자리 모두가 9를 초과하므로 계산 결과에 0110 0110을 더해주면 된다.

 

3초과 코드

  • BCD코드로 표현된 값에 3을 더해 준 값으로 나타내는 코드
  • 자기 보수의 성질을 갖는다.
10진수 BCD 코드 3초과 코드
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100

EX) 10진수 13을 3초과 코드로 변환해라

10의 자리 0001 -> 3초과 코드 0100

1의 자리 0011 -> 3초과 코드 0110

따라서 13의 3초과 코드는 0100 0110

 

자기 보수 코드(Self Complementary Code)
스스로 보수를 만드는 코드란 뜻이다
위의 표에서 3초과 코드의 각 자리의 0을 1로, 1을 0으로 바꿔보자(1의 보수를 취해보자)
10진수 0의 3초과 코드 0과 1을 뒤집어보면 1100이고, 이는 3초과 코드의 9이다.
10진수 1의 3초과 코드 0과 1을 뒤집어보면 1011이고, 이는 3초과 코드의 8이다
이렇게 계속해서 마지막인 10진수 4의 3초과 코드 0과 1을 뒤집어 보면
0111은 3초과 코드의 5이다.
즉, 합이 9가 되는 수끼리 서로 1의 보수관계를 갖는 코드가 자기 보수 코드이다.
이 때문에 오류를 검출할 수 있는 능력이 생긴다.
자기 보수 코드는 3초과 코드, 8421 코드, 2421 코드, 51111 코드 등이 있다.

'기타' 카테고리의 다른 글

카멜 케이스, 파스칼 케이스, 스네이크 케이스  (0) 2023.07.03
향상된 for문  (0) 2023.02.13
순서도(Flowchart)  (0) 2023.01.16
진수, 진법 변환, 보수  (0) 2022.11.29
벤포드의 법칙(with 파이썬)  (1) 2022.11.23

진수, 진법 변환, 보수

ReBugs
|2022. 11. 29. 03:14

[진수]

[10진수]

기수가 10인 수

0, 1, 2 ,3, 4, 5, 6 ,7, 8, 9 -> 10개 수로 표현

[2진수]

기수가 2인 수

0, 1 두개의 수로 표현

 

[8진수와 16진수]

[8진수]

0~7까지 8개의 수로 표현

2진수 3자리는 8진수 1자리

2진수에 해당하는 8진수

8진수 0 1 2 3 4 5 6 7
2진수 000 001 010 011 100 101 110 111

[16진수]

0~9, A~F까지 16개의 기호로 표현

2진수 4자리는 16진수 1자리

10진수 0 1 2 3 4 5 6 7
16진수 0 1 2 3 4 5 6 7
2진수 0000 0001 0010 0011 0100 0101 0110 0111
10진수 8 9 10 11 12 13 14 15
16진수 8 9 A B C D E F
2진수 1000 1001 1010 1011 1100 1101 1110 1111

다음 8진수와 16진수를 10진수로 변환하시오
(a)475.26(8) (b)A91.CD(16)

[진법 변환]

[10진수-2진수 변환]

정수부분과 소수부분으로 나누어 변환

정수부분은 2로 나누고, 소수부분은 2를 곱한다

[10진수-8진수 변환]

8로 나누고, 곱한다.

[10진수-16진수  변환]

[10진수-n진수 변환]

정수부는 n으로 나누고, 소수부는 n으로 곱해준다.

정리하자면..........

[2진수 정수 연산과 보수]

[2진수  양의  정수  덧셈]

0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 10 (자리올림 발생)

[보수]

최상위비트(MSB)를 부호비트로 사용

양수는 0으로, 음수는 1로 나타낸다.

 

[1의 보수]

0을 1로 바꾸고, 1을 0으로 바꾼다.

[2의 보수]

1의 보수에 더하기 1을 하면 2의 보수가 된다.

[9의 보수]

567의 9의 보수 :  999 - 567 = 432

 

[10의 보수]

567의 10의 보수 : 1000 - 567 = 433

'기타' 카테고리의 다른 글

카멜 케이스, 파스칼 케이스, 스네이크 케이스  (0) 2023.07.03
향상된 for문  (0) 2023.02.13
순서도(Flowchart)  (0) 2023.01.16
BCD 코드와 3초과 코드  (1) 2022.12.24
벤포드의 법칙(with 파이썬)  (1) 2022.11.23

수학 관련 교양과목을 듣다가 과제로 실생활에 있는 수학에 대해 조사 해오라 해서, 얼마 전 유튜브 알고리즘이 나를 벤포드의 법칙으로 이끌어서 주제는 이걸로 정했고, 조사해 보다가 흥미로워서 적어본다.

벤포드의 법칙이란

어떠한 수치데이터에서 아라비아의 숫자 중에서 그 숫자의 앞자리만 놓고 봤을 경우

1부터 9까지 숫자 중 1이 가장 많이 사용된다는 법칙

12412, 252355, 745734, 86264 이렇게 수치 데이터가 있다고 하면, 각 앞자리는 1, 2, 7, 8이다

이렇게 여러개의 데이터를 뽑으면 1~9까지 수중에서 각 숫자가 사용될 확률이 11.11%가 아니라 1이 가장 많이 사용된다는 법칙

그림과 같이 1이 가장 많이 사용되고 9로 갈수록 빈도가 낮아진다.

이를 수식으로 나타내면

식의 결과 값과 벤포드의 법칙의 각 숫자 비율과 똑같은 것을 알 수 있다.

 

원리

내가 알아본 바를 예시를 들어 쉽게 설명하자면

- 보통 데이터들은 1로 시작한다. 그리하여 1로 시작하는 데이터가 가장 많을 수밖에 없고

- 1에서 2로 넘어갈 때 가장많은 시차가 발생한다.

 

어떤 불량식품이 천원이라고 할 때,

천원에서 이천원으로 가격 인상을 하면 100% 증가한 것이다. 

2천원에서 3천 원으로 인상하는 것은 50% 증가이다.

3천원에서 4천 원으로 인상하는 것은 33.3% 증가이다.

즉, 천원에서 2천원으로 가격을 올릴 때 가장 많은 시간이 걸린다

9천원이 되었다면 11%만 인상해도 다시 앞자리 수가 1인 만원이 된다.

만원에서 2만원이 되려면 100%가 상승해야 하니 다시 시간이 오래 걸릴 수밖에 없다.

 

따라서 앞자리가 낮은 숫자일 수록 머무는 체류시간이 길어지고, 세상에는 앞자리 수가 1인 숫자가 많아질 수밖에 없다.

 

활용 분야

벤포드의 법칙은 여러 분야에서 쓰인다.

대표적으로 기업들의 회계 데이터 분석에 쓰인다.

기업들의 회계 데이터를 분석하면 벤포드의 법칙을 그대로 따르는데, 반대로 이법칙을 이용하면 회계장부를 조작한 기업을 적발할 수 있다.

예전에 대표적인 사기기업 엔론의 회계 데이터를 조사했는데

왼쪽이 벤포드의 법칙 그래프이고, 오른쪽이 엔론의 회계장부 데이터

표와 같이 벤포드의 법칙을 따르지 않는 것을 볼 수 있다.

그리하여 엔론은 파산한다.

 

뿐만아니라 전 세계의 GDP 첫 숫자 비율과 벤포드 비율이 거의 유사하다.

또한, 지구와 별까지의 거리, 국가별 인구수, 트위터 팔로우 수, 테러에 의한 부상자 수, 휴대폰 비밀번호 첫 앞자리 등등 여러 데이터가 벤포드의 법칙을 따른다.

벤포드의 법칙은 무적의 법칙일까?

이 법칙을 이용하면 로또 부자가 될 수 있을 거라고 생각한 사람 무조건 있을 거다.

근데 아쉽게도 로또에는 이 법칙이 성립이 안된다.

로또는 45개의 공에 편의를 위해 아라비아 숫자를 표기했을 뿐, 로또 번호는 엄밀히 숫자가 아니다.

2, 35, 26이라는 로또 공에 강아지, 메뚜기, 무당벌레라고 표기해도 로또 시스템엔 전혀 문제가 없다.

 

또한 수치 데이터가 아니라 그냥 랜덤인 숫자들 사이에도 이 법칙은 성립하지 않는 것으로 보인다.

아래는 파이썬을 이용해서 1~100만까지의 수중에서 만개의 수를 랜덤으로 뽑고, 수들의 앞자리만 추출하는 코드이다.

import random
numbers = []
while True:
    if len(numbers) == 10000:break
    RN = random.randint(1,1000000)
    numbers.append(RN)
print(numbers)
i_numbers = []
for i in numbers:
    if i < 10:
        i_numbers.append(i)
    elif i <100:
        i_numbers.append(i // 10)
    elif i <1000:
        i_numbers.append(i // 100)
    elif i < 10000:
        i_numbers.append(i // 1000)
    elif i < 100000:
        i_numbers.append(i // 10000)
    elif i < 1000000:
        i_numbers.append(i // 100000)
print(i_numbers)
counter = {1 : 0, 2 : 0, 3 : 0, 4 : 0, 5 : 0, 6 : 0, 7 : 0, 8 : 0, 9 : 0}
for number in i_numbers:
    counter[number] += 1
print(counter)
for i in counter:
    a = counter[i] / 10000
    print(a)

결과를 보면 각 숫자들이 나올 확률이 거의 11.11%에 근접하는 것을 볼 수 있다.

 

따라서 랜덤 성이 극도로 높거나, 정규분포를 따르는 데이터, 균일 분포를 따르는 데이터, 주사위 확률처럼 균등한 분포를 보이는 데이터 등은 벤포드의 법칙을 따르지 않는다고 볼 수 있다.

벤포드의 법칙은 만능의 법칙이 아니다.

'기타' 카테고리의 다른 글

카멜 케이스, 파스칼 케이스, 스네이크 케이스  (0) 2023.07.03
향상된 for문  (0) 2023.02.13
순서도(Flowchart)  (0) 2023.01.16
BCD 코드와 3초과 코드  (1) 2022.12.24
진수, 진법 변환, 보수  (0) 2022.11.29