본문 바로가기
반응형

삼성 EXPERT60

BOJ 10757 : 큰 수 A+B 알고리즘 문제 전체 링크 삼성 C형 전체 링크 https://www.acmicpc.net/problem/10757 참고 - BOJ 10757 : 큰 수 A+B - BOJ 10757 : 큰 수 A+B with 10^N진법 - BOJ 2338 : 긴자리 계산 - BOJ 2338 : 긴자리 계산 with 10^N진법 - 36진법 긴자리 두 수의 곱셈 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 + Fast Input 큰 수의 덧셈은 3가지 방법으로 가능하다. 1. 더 짧은 자리 앞에 긴 자리 수 만큼 '0'을 추가하고 더하기 2. 문자열을 뒤집고 계산한 후, 다시 뒤집기 3. int로 변경한 후, 뒤집고, 다시 뒤집은 후, char로 변경하기 .. 2023. 7. 29.
C, C++ - 1 비트 개수 세기 (Bit Counter) C, C++ 전체 링크 삼성 C형 전체 링크 주어진 숫자에 대해 비트 단위로 1이 몇 개 인지 세는 함수를 만들어보자. 먼저 비트 단위로 출력하기를 이용하여 아래의 코드를 실행해보자. #include #include using namespace std; typedef long long int ll; template void printBitNumber(T number) { unsigned int bitSize = sizeof(number) * 8; T mask = (1ull) = 1; if (i % 8 == 7) printf(" "); } putchar('\n'); } int main(void) { ll bit = 1234123412341234123; printf("bit : "); printBitNumb.. 2023. 7. 29.
C, C++ - 비트 연산으로 2의 제곱수 처리하기 C, C++ 전체 링크 삼성 C형 전체 링크 2n 또는 2n - 1 판단하기. 숫자 x에서 -1을 하고 & 연산을 해서 0이 되면 2n이다. 그리고 x에서 +1을 하고 & 연산을 해서 0이 되면 2n - 1이다. 2n은 bit로 나타내면 하나의 bit만 1이기 때문에 이런 규칙이 생긴다. 0100 0000 = 64 0011 1111 = 63 ------------------ 0000 0000 = 64 & 63 = 0 마찬가지로 2n - 1도 연산을 해보면 쉽게 규칙을 파악할 수 있다. 0111 1111 = 127 1000 0000 = 128 ------------------- 0000 0000 = 127 & 128 = 0 #include int main(void) { int x; /* 주어진 부호 없는 .. 2023. 7. 29.
BOJ 15688 : 수 정렬하기 5 with In-Place Sort 알고리즘 문제 전체 링크 삼성 C형 전체 링크 https://www.acmicpc.net/problem/15688 참고 - BOJ 2751 : 수 정렬하기 2 with 계수 정렬 (Counting Sort) 만약 배열 a의 크기가 매우 크지만 원소의 종류는 매우 적다면, count와 countSum의 배열의 크기는 작아진다. 따라서 이 경우에는 a의 원소의 종류만큼만 필요하게 되고 추가적인 메모리가 거의 없이 in-place 처럼 sorting이 가능하다. 이상적인 In Place 정렬은 다음과 같다. 함수 스택에서 약간의 메모리만 사용할 뿐 추가적인 메모리 없이 a[]에서 서로 교환한다. void inPlaceSort(int a[], int size) { int count[MAX + 10] = { 0 .. 2023. 7. 29.
중위 표기식 직접 연산하기 삼성 C형 전체 링크 참고 - 후위 표기식 - 괄호가 있는 중위 표기식 연산하기 괄호가 없는 경우, 아래의 순서대로 연산하면 중위 표기식을 직접 계산할 수 있다. 1. 숫자를 만나면 현재 숫자(cur)를 저장해둔다. 2. +, - 연산자가 나오면 temp에 현재의 숫자를 곱한다. (temp는 1로 초기화) 3. 그리고 result에 temp를 더한다. 4. *, / 가 나오면 temp에 값을 누적한다. 5. 이후 +, - 연산자가 나오면 2 ~ 3을 실행한다. 6. 모두 종료 후 남은 연산 실행 아래의 식으로 중위 표기식을 연산해보자. operator는 *나 /를 만난 후 저장할 연산자이며, 초기화는 * 로 한다. temp는 1로 초기화하고 - 를 만나게 되면 -1로 초기화한다. 첫 숫자 a를 cur에 .. 2023. 7. 29.
괄호가 있는 중위 표기식 연산하기 삼성 C형 전체 링크 참고 - 스택 - 괄호 - Brainf**k 인터프리터 - 후위 표기식 - 중위 표기식 연산하기 중위 표기법 연산은 아래와 같다. 1. 숫자를 만나면 현재 숫자(cur)를 저장해둔다. 2. +, - 연산자가 나오면 temp에 현재의 숫자를 곱한다. (temp는 1로 초기화) 3. 그리고 result에 temp를 더한다. 4. *, / 가 나오면 temp에 값을 누적한다. 5. 이후 +, - 연산자가 나오면 2 ~ 3을 실행한다. 6. 모두 종료 후 남은 연산 실행 이때 괄호를 만나면 닫힌 괄호까지를 먼저 계산하고 temp로 변경한다. 그리고 괄호 연산이 끝난 경우는 다음 연산을 위해 cur = 1로 초기화 해야 한다. 괄호 내에서는 다시 중위 표기식이 될 것이기 때문에 위의 방법을 .. 2023. 7. 29.
C, C++ - 임시 변수 없이 변수 바꾸기 (Swap Two Numbers without using the Third Variable) C, C++ 전체 링크 삼성 C형 전체 링크 long long int 타입 a, b 변수를 교체해보자. #include typedef long long int ll; int main(void) { ll a = 1234123412341234; ll b = 5678567856785678; printf("a : %lld\n", a); printf("b : %lld\n", b); putchar('\n'); ll tmp = a; a = b; b = tmp; printf("a : %lld\n", a); printf("b : %lld\n", b); return 0; } 값이 잘 변경된 것을 알 수 있다. XOR Swap 알고리즘을 이용하면 변수를 추가하지 않고 아래와 같이 간결하게 두 변수를 교환할 수 있다. a ^.. 2023. 7. 29.
C, C++ - 비트 연산 기본 매크로 함수 (bit macro : get, set, clear, toggle, check) C, C++ 전체 링크 삼성 C형 전체 링크 비트 연산 기본에 대해서 알아보자. (get, set, clear, toggle, check) - 비트 1개 연산 - 연속된 여러 비트 연산 - 비트 마스크 연산 비트 1개 연산 다음의 코드를 실행시켜보자. #include typedef long long int ll; #define SET_BIT(value, n) ((value) |= (1ull 2023. 7. 29.
#define printf 재정의를 이용한 로그 출력 디버깅 팁 삼성 B형 전체 링크 삼성 C형 전체 링크 printf를 이용하여 로그를 출력해서 디버깅을 완료하였다고 하자. 이제 정답을 제출해야 되므로 printf를 모두 삭제하거나, 주석 처리해야 한다. 하지만 이 과정은 꽤 번거롭다. 지우는 것도 일이지만, 정답이 아닌 경우 지웠던 printf를 다시 복구하는데 시간이 꽤 많이 쓰인다. #define을 이용해서 printf를 재정의하면 이런 일을 간단히 해결할 수 있다. 아래 코드를 실행해보자. #include #define P printf int main() { P("hello!\n"); P(">> %s %d\n", "world", 100); return 0; } #define을 이용하여 printf를 P로 재정의했을 뿐이다. 그러니 원래 printf의 효과와 .. 2023. 7. 29.
반응형