전체 글
[실5] 30457 - 단체줄넘기
#include #include #include #include using namespace std;using IntPair = pair;#define y first#define x second#define MAX 1000// 다음 위치 시계 방향IntPair pos[]{ { 1, 0 }, // 북 { 0, 1 }, // 서 {-1, 0 }, // 남 { 0,-1 } // 동};int main(){ int n, res = 0; cin >> n; vector cnt(MAX + 1); for (int i = 0; i > n; cnt[n]++; } for (int i = 0; i

실수형 (float) 자료형의 메모리 구조, 실제로 변환해보기
exponent : 지수부 (지수 부분)matissa : 기수부 (분수 부분) float형 실수의 전체 구조 IEEE 754 표준은 binary32에 대해 다음과 같이 명시한다.부호 비트 : 1 비트지수부 비트 : 8 비트가수부 비트 : 정밀도는 24 비트 (실제로 메모리엔 23 비트로 표현) 부호부 1 비트는 실수값이 양수일 때 0, 음수일 때 1로 표현된다. 지수부 8 비트를 unsigned char로 봤을 때, 실제 값에서 127을 더한 값을 저장하며 저장된 값의 범위는 다음과 같다.stored bits : 0 actual value : -127 (실제 지수값을 표현하는 것이 아닌 특정 의미가 있음)stored bits : 1 actual value : -126stored ..
float 자료형의 메모리 구조 (컴퓨터의 실수 표현)
실수형은 IEEE의 부동소수점 형식을 사용하는데 4바이트(32비트) 표현의 경우 아래와 같이 이루어져 있다. 정수의 경우 2의 보수법을 이용해서 간단하게 메모리에 저장된 비트를 확인할 수 있지만 실수는 조금 더 복잡하다.아래의 단계를 거치면 실수가 메모리에 어떻게 표현이 되는지 알 수 있다. 위에 나와있는 -101.625를 컴퓨터의 표현 방법으로 바꿔보겠다1단계 - 이진수로 바꾸기이진수로 바꾸기 위해서는 나눗셈과 곱셈을 하면 된다. 일단 부호를 제외하고, 정수 부분은 2로 나누기를 연속으로 해서 2진수로 바꿔주자 101/2 = 50 ... 150/2 = 25 ... 025/2 = 12 ... 112/2 = 6 ... 06/2 = 3 ... 03/2 = 1 ... 1 정수 부분은 1100101 이다. 소수..
실수의 부동 소수점 저장 방식
정수의 저장 방식컴퓨터는 10진수로 표현 된 수를 0과 1로 저장하기 위해 2진수로 변환한 정보를 저장하게 된다.23을 예로 들면23=16(24)+4(22)+2(21)+1(20)이므로, 2진수로 표현하면 10111 이다.(물론 2진수로 변환하는 방법은 다양하다. 23을 2로 나누며 그때의 나머지를 계속해서 저장하는 방법 등. 그러나 뒤에서의 이해를 돕기위해 2의 제곱수로 표현함).이 10111의 수를 1Byte의 메모리에 0001 0111으로 저장하는 방식이다.실수의 표현 방식고정 소수점 방식단어 그대로 소수점의 위치를 고정시켜놓고 수를 표현하는 방식이다.예시) 123.45123.45는 10진수에서 소수점 밑의 두자리를 고정시켜놓고 표현한 것. 보다시피 "정수. 소수"의 형태로 나타낸다.이를 고정소수점 ..
[실3] 24725 - 엠비티아이
#include #include #include #include #include #include #include using namespace std;using IntPair = pair;using ll = long long;IntPair dir[]{ {1, 0}, // 상 {-1, 0}, // 하 {0, -1}, // 좌 { 0, 1 }, // 우 {1, -1}, {1, 1}, {-1, -1}, {-1, 1 },};#define MAX 2string alpha[]{"E","I", "N", "S", "F", "T", "P", "J"};vector mbti, board;int n, m, res;void Init(){ // E N F P > [0][0] + [1][0] + [2][0] + [3][..

[C++] 순열 (Permutation) 구할 수 있는 알고리즘
개념n개의 값 중에서 r개의 숫자의 순서를 고려해 나열한 경우의 수 nPr = n x n-1 x n-2 ...... x n-r+1EX) {1,2,3} 총 3개의 값 중에서 3개의 숫자를 순서를 고려해 나열하면1 2 3 / 1 3 2 / 2 1 3 / 2 3 1 / 3 1 2 / 3 2 1 로 총 6개 로 나타낼 수 있다 (3! = 1x2x3)swap 방식 0번째 인덱스 원소를 0번째 부터 n-1번째까지 위치를 바꾼다 (ABC, BAC, CBA)1번 과정을 진행해서 나온 경우들을, 1번째 인덱스 원소를 1번째부터 n-1번째까지 위치를 바꾼다이러한 과정을 n-1번 반복한다 순열들의 순서가 보장되지 않는다 EX) C,A,B가 먼저 나오는게 아니라 C,B,A가 먼저 노출됨#include #include #inc..
[실2] DFS와 BFS
굳이 정렬을? #include #include #include #include //#include using namespace std;using IntPair = pair;using ll = long long;IntPair nDir[]{ {1, 0}, // 상 {-1, 0}, // 하 {0, -1}, // 좌 { 0, 1 }, // 우};int n, m, v;vector> g;vector vis;void DFS(int n = v){ vis[n] = true; cout q; q.push(v); vis[v] = true; while (!q.empty()) { int f = q.front(); q.pop(); cout > n >> m >> v; g.resize(n + 1); vis.resize(..
[C++] 조합 (Combination) 구할 수 있는 알고리즘
개념n개의 값 중에서 r 개의 숫자의 순서를 고려하지 않고 나열한 경우의 수, 순열은 반대로 고려한다. 예시) [1,2] 와 [2,1] 이 있을 때 동일하게 여긴다는 의미계산식으로는 nCr 이라고 표현한다.nCr= nPr / r!= n! / ((n-r)! * r!)예시로 서로 다른 3개의 숫자(1,2,3) 중 중복되지 않으면서 순서와 관계 없이 2개를 뽑는다고 가정해보자3C2= 3! / 1! * 2!= 3! / 2!= (3x2x1) / (2x1)= 3로 총 3개의 경우의 수가 나오게 된다 (1,2 / 1,3 / 2,3) 조합의 점화식 n-1Cr-1 + n-1Crn-1Cr-1 : 어떤 특정한 원소를 포함시키고 뽑았을 때n-1Cr : 어떤 특정한 원소를 포함시키지 않고 뽑았을 때예시){1,2,3} 에서 3C..
[C++] multimap 값 가져오기
#include #include using namespace std;int main(){ multimap a; a.insert(pair(1, 2)); a.insert(pair(1, 2)); a.insert(pair(2, 4)); cout ::iterator it = a.begin(); it != a.end(); ++it) cout first second first second
[C++] volatile 키워드
개념const 키워드와 함께 변수의 성질을 바꾸는 역할을 하는 타입 한정자지만 그 사용 빈도가 낮아 책이나 자료들에서도 잘 다루어지지 않는 타입이다.volatile 키워드가 지정된 변수는 최적화를 수행하지 않는다.변수의 최적화최적화를 시켜주는 컴파일러의 기능인데 프로그래머는 사람이기 때문에 실수를 하기 마련이다. 물론 컴파일러가 모든걸 보완할 수는 없다. 예를 들면)int a;a = 0;a = 1;a = 3;a에는 최종적으로 3의 값이 들어가게 되며 이전의 작업인 0과 1은 의미가 없게 된다, 따라서 재정의를 하는 경우에는 컴파일러가 알아서 위의 두 작업을 삭제한다. 이를 통해 수행 시간의 이득을 가져올 수 있다. 하지만, 만약 메모리를 참조하여 하드웨어에 명령을 내리는 코드라고 가정하고 a를 메모리 쓰..