본문 바로가기
반응형

개발/C, C++67

C, C++ - 비트 단위로 출력하기 (Print Bit) C, C++ 전체 링크 삼성 C형 전체 링크 아래와 같이 %x 옵션을 이용하면 4비트 (0 ~ F)로 값을 출력할 수 있다. #include typedef unsigned long long int ull; int main(void) { ull h = 1023; printf("0x%08X\n", h); return 0; } 이제 변수가 주어질 때, 1 비트 단위로 출력하는 함수를 만들어보자. printBitNumber를 템플릿을 이용해서 만들고 mask를 이용해 최상위 비트부터 하나씩 내려가면서 출력한다. // signed에서 error 발생 #include typedef unsigned char uc; typedef unsigned short us; typedef unsigned int ui; typed.. 2023. 6. 3.
C++ - 튜플로 여러 값 반환하기 (Returning Multiple Values Using Tuple) C, C++ 전체 링크 참고 - 포인터와 참조자 - C# 튜플로 여러 값 반환하기 어떤 함수를 호출해서 이름, 나이, 몸무게를 알고 싶다고 하자. C에서는 포인터를 이용하여 여러 값을 얻을 수 있다. (당연히 string은 사용하지 못한다.) void getInfo(string* name, int* age, int* weight) { *name = "blood"; *age = 20; *weight = 70; } 그리고 getInfo에 변수의 주소를 넘겨주면 된다. getInfo(&name, &age, &weight); C++이라면 참조자를 이용할 수 있다. void getInfo(string& name, int& age, int& weight) { name = "blood"; age = 20; weigh.. 2023. 4. 15.
scanf를 이용해 정수 1칸 입력 받기 C, C++ 전체 링크 BOJ 1080 : 행렬 문제를 보면 input 받아야 할 숫자가 붙어있다. 이 경우에는 scanf에 "%1d" 옵션을 주면 1칸(1개)씩만 읽는다. ( scanf("%1d", &input); ) 아래의 코드를 실행하면 정상적으로 입력을 받은 것을 알 수 있다. #include #define MAX (50 + 5) int N, M; int A[MAX][MAX]; int B[MAX][MAX]; void input() { scanf("%d %d", &N, &M); /* 입력 */ for (int r = 1; r 2023. 3. 26.
비트 on / off C, C++ 전체 링크 삼성 C형 전체 링크 참고 - 비트 단위로 출력하기 구현은 아래를 참고하자. #include 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) { int x; printf("제일 오른쪽 1-비트 끄기 (ex: 01011000 => 01010000)\n"); x = 2152; printBitNumber(x); x &= (x - 1); printBitNumber(x); printf("===============================.. 2023. 1. 24.
N x N 2차원 배열 뒤집기, 회전하기 (Rotate, Flip 2D Array) C, C++ 전체 링크 2차원 배열의 크기가 N x N인 경우 배열을 뒤집거나 회전하는 코드는 다음과 같다. #include #define SIZE (5) int map[SIZE][SIZE]; void init(int map[SIZE][SIZE]) { int count = 1; for (int i = 0; i < SIZE; i++) for (int k = 0; k < SIZE; k++) map[i][k] = count++; } void printMap(int map[SIZE][SIZE]) { for (int i = 0; i < SIZE; i++) { for (int k = 0; k < SIZE; k++) printf("%02d ", map[i][k]); putchar('\n'); } putchar('\n.. 2022. 11. 27.
100명의 죄수가 살아남을 확률을 높이기 위한 루프 전략 (Loop Strategy) C, C++ 전체 링크 무한히 작은 확률을 30%까지 올리는 기적의 전략 확률 1000000000000000000000000000000배 높이기 구현 with Veritasium https://www.youtube.com/watch?v=PE4vLbyOgw0 ▲ 유튜버 베리타시움의 영상인 퀴즈를 직접 구현해보자. 영상이 길다면 fmkorea의 요약본을 보자. 1부터 100까지 번호가 매겨진 죄수가 있다. 이때 각 죄수의 번호가 적힌 쪽지가 100개의 상자에 무작위로 담겨있다. 죄수들은 한 번에 한 명씩 방에 들어가서 50개의 상자를 열 수 있다. - 이때, 자신의 번호를 찾아야 한다. 50개를 모두 열어본 후에는 방을 들어왔던 상태와 완벽히 동일하게 복구하고 나가야 한다. 만약 100명의 죄수가 모두 자신.. 2022. 9. 24.
C, C++ - Window Visual Studio에서 폴더의 모든 파일 통합하기 C, C++ 전체 링크 참고 - 폴더, 파일 관리 함수 정리 with sys/stat.h, dirent.h, fstream isDirectory - 폴더 / 파일 체크 함수 getAllFilePath - 해당 경로를 모두 읽어오는 함수 deleteDirectoryFiles - 폴더, 파일 삭제 함수 deleteAllDirectoryFiles - 모든 폴더, 파일 삭제 함수 fileCopy - 파일 복사 함수 numOfDigits - 자릿수를 세는 함수 padStart - 자릿수의 빈칸을 앞부분부터 특정 문자로 채우는 함수 split - 특정 문자열 기준으로 분해하는 함수 getExtension - 파일의 확장자를 얻는 함수 아래와 같이 MyFiles 폴더가 있다고 하자. 여기에 있는 파일들을 한꺼번에 하.. 2022. 8. 9.
원주율 Pi : 라이프니츠 공식 (Leibniz Formula for π) C, C++ 전체 링크 라이프니트 원주율 공식은 아래와 같은 분모가 홀수인 값의 교대 급수에서 유도된다. 따라서 원주율 π (pi)는 교대 급수에 4를 곱한 값이 된다. precisionCount를 넘겨 받는 메서드를 만들어서 정밀도를 확인해보자. #include double pi(int precisionCount) { double leibniz = 0; int odd = 1; int inverse = 1; for (int i = 0; i < precisionCount; i++, odd += 2, inverse *= -1) { leibniz += 1 / (double)(odd * inverse); } return 4.0 * leibniz; } int main() { printf("%.15f\n", pi(.. 2022. 8. 1.
셔플 Shuffle - 카드 섞기 알고리즘 C, C++ 전체 링크 삼성 C형 전체 링크 1~10까지 카드가 있다고 가정하자. 이때, 카드를 N번(20) 적당히 섞어보자. stdlib.h를 선언하면 rand()함수를 이용할 수 있다. 카드가 총 10장이므로 카드의 size = 10으로 rand() % size를 하면 10장 중 1개의 카드를 랜덤으로 고를 수 있다. 카드를 2장 랜덤으로 골라 교환하면 카드가 섞인다. #include #include /* rand() 사용을 위한 선언 */ int main(void) { int N = 20; int card[] = { 1,2,3,4,5,6,7,8,9,10 }; int size = sizeof(card) / sizeof(int); for (int i = 0; i < N; i++) /* N번 교환 */ .. 2022. 7. 8.
반응형