비트 연산
·
Programming/기타
비트란?한개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산. 일반적으로 비트라고 하는것은 데이터의 가장 작은 단위라고 할 수 있다.모든 메모리는 0과 1을 가지고 이진수로 저장이 되는데, 이 0혹은 1의 값을 비트라고 부르는 것이다.이 비트가 8개 모이면 바이트가 되어 비로소 무언가를 해볼만한 사이즈가 된다. 그렇다면 비트 연산이란 무엇인가?비트 수준으로 값을 다루는 경우 비트 단위 연산자라는 것을 사용하는데, 정수형 수식(char, short, int, long, long long 등등...)에 사용할 수 있는 연산자로, 시스템에 종속적이라는 특징을 갖고 있다. 이 비트 연산자는 6가지가 존재하는데 하나하나 알아보도록 하자.연산자 종류연산자 이름연산자논리 연산자(단항) 비트단위 보수~비트단위 ..
UTF - 8 / 16
·
Programming/기타
UTF에 대해서UTF란 유니코드 변환 형식(Unicode Transformation Format) 인코딩을 의미하는데,여기서 인코딩은 어떠한 정보, 데이터를 다른 형식으로 변환시키는 과정을 뜻한다. 대표적인 UTF방식으로 UTF-8과 16이 존재한다. 유니코드란?컴퓨터는 0과 1의 이진법만 이해하는데, 사람은 익히기만 한다면 그와 달리 매우 많은 언어를 구사할 수 있다.따라서 인간의 언어(자연어)를 컴퓨터(기계어)가 이해하기 위해서는 중개자가 필요하다.그 중개자 역할을 하는 것이 유니코드이다. 어떻게 이루어지는가?예를 들어 유니코드를 UTF-8로 인코딩을 한다고 가정해보자.인코딩 규칙은 다음과 같다.1. 1개 바이트를 사용하는 경우- 이 경우에는 가장 큰 비트에 0을 할당하고, 나머지 7비트에 기존의 아..
BOJ - 나이순 정렬 10814
·
코딩테스트
해결방법나이가 증가하는 순으로 정렬해야 하고, 나이가 같다면 먼저 가입한 순으로 정렬을 해야한다는 점을 구현해야 한다. 일단 stable_sort를 이용한다면 나이가 같을 때 먼저 가입한 순으로 정렬을 해야 한다는 점은 생각하지 않아도 좋다. 정렬하기 전의 상대적인 순서를 유지해주기 때문이다. 따라서 나이순으로 정렬을 하는 부분만 신경써주면 된다. 정답 코드#include #include #include #include using namespace std;int main(){ int N; cin >> N; vector> members; for (int i = 0; i > age >> name; members.push_back({ age, name }); } stable_sort(members.begin..
BOJ - 최대공약수와 최소공배수 2609
·
코딩테스트
해결방법최대공약수와 최소공배수를 구하는 공식을 알고 있다면 쉽게 구할수 있다. 두 수 a와 b를 가지고 문제를 푼다고 가정했을때최대공약수의 경우 a를 b로 나눈 나머지 값이 0과 같다면 b가 최대공약수가 되고, 아니라면 b와 b를 a와 b로 나눈 나머지를 가지고 반복을 해주는 형태로 구할 수 있다. 최소공배수의 경우 a와 b의 곱을 최대공약수로 나눠준 값이 된다. 정답 코드#include using namespace std;int GCD(int a, int b){ return (a % b == 0 ? b : GCD(b, a % b));}int LCM(int a, int b){ return a * b / GCD(a, b);}int main(){ int A, B; cin >> A >> B; cout
BOJ - 좌표 정렬하기 2 11651
·
코딩테스트
해결방법처음에 map을 사용해서 문제를 풀어보려고 했는데 잘 되지 않아서 vector와 pair를 섞어서 사용하는 방식으로 선회했다. 문제를 보면 y좌표를 가지고 정렬을 하라는 것을 알 수 있다.따라서 정렬 기준은1. y좌표값을 비교를 하고,2. 만약 y좌표값이 같다면 x좌표값을 비교한다.가 된다. 정답 코드#include #include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); int N, x, y; cin >> N; vector> dots; for (int i = 0; i > x >> y; dots.push_back({ x, y }); } s..
BOJ - 욱제는 결정장애야!! 14646
·
코딩테스트
해결방법우선, 2N번 돌리면 N일동안의 메뉴를 모두 정할수 있다고 하는 것으로 반복을 최소 2 * N번 해야 한다는 것을 알 수 있다. 문제의 핵심은 Menu[input - 1] 이 부분이다. 스티커를 붙이면 저 부분에 +1을 해주고, 아니라면 -1을 해주면 된다. 정답 코드#include using namespace std;int main(){ int N, input, num = 0, max = 0; int Menu[100000] = { 0 }; cin >> N; for (int i = 0; i > input; if (Menu[input - 1] == 0) num++; else if (Menu[input - 1] == 1) num--; Menu[input - 1]++; if (max