본문 바로가기
반응형

casting9

char 타입 배열을 다른 타입의 메모리로 사용하기 삼성 C형 전체 링크 정수 500 ~ 1000을 char 타입 memory[1000]에 넣어보자. #include char memory[1000]; void memoryWrite(char memory[]) { for (int i = 500; i < 1000; i++) memory[i - 500] = i; } void memoryRead(char memory[]) { for (int i = 0; i < 500; i++) printf("%d\n", memory[i]); } int main() { memoryWrite(memory); memoryRead(memory); return 0; } 당연히 char 타입은 unsigned인 경우에도 255까지만 넣을 수 있기 때문에 위의 결과가 나오게 된다. 하지만 메.. 2023. 8. 26.
타입 캐스팅으로 입력 빨리 받기, 비트 연산으로 메모리 압축하기 삼성 C형 전체 링크 참고 - 비트 단위로 출력하기 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 + Fast Input 카드 4장이 한 세트로 있고 각 카드에 점수가 있다고 가정하자. 카드 : 0 0 0 0 ~ 카드 : 9 9 9 9로 총 10000개의 카드 세트가 존재한다. 그리고 카드 a b c d 의 점수는 abcd (a * 1000 + b * 100 + c * 10 + d)라고 하자. char card[10000][4]; int answer[10000]; void makeCard() { int count = 0; for (int a = 0; a < 10; a++) for (int b = 0; b < 10; b++) for (int c = 0; c < 10; c++) for (int d .. 2023. 8. 26.
타입 캐스팅으로 한 번에 메모리 쓰기, 읽기 (Memory Write and Read with Type Casting) 삼성 C형 전체 링크 참고 - 타입 캐스팅으로 deep copy, memcpy 구현하기 타입 캐스팅을 이용하면 char 배열 8칸을 한꺼번에 입력할 수 있다. 즉, 크기가 작은 타입의 배열을 long type으로 한 번에 읽거나 쓸 수 있다. 이 방법은 메모리를 통째로 복사하는 방법과 원리가 같다. Write char a[8]; 배열에 1, 2, 3, 4, 5, 6, 7, 8을 입력해야 한다고 하자. 그러면 for문을 8번 순회해서 i 번째 배열에 i + 1을 입력하는 코드를 만들 수 있다. char a[8] = { 0 }; for (int i = 0; i < 8; i++) a[i] = i + 1; 하지만 type casting으로 a[0]번째 주소 (&a[0])을 long type으로 캐스팅하면, 한 .. 2023. 8. 15.
타입 캐스팅으로 deep copy, memcpy 구현하기 (Memory Copy with Type Casting) 삼성 C형 전체 링크 참고 - 타입 캐스팅으로 한 번에 메모리 쓰기, 읽기 삼성 C형에서는 string.h 라이브러리를 사용할 수 없기 때문에 memcpy를 사용할 수 없다. 그래서 배열을 복사할 때, for문을 이용해 직접 복사한다. 그런데 임시 변수 없이 변수 바꾸기에서 long 타입을 캐스팅하여 배열을 한꺼번에 교체하였다. 이 방법을 더 확장하여 더 빠른 copy를 메모리 casting으로 구현할 수 있다. 1차원 배열 복사 - 배열 복사 먼저 단순 복사 코드를 보고 실행 시간을 확인해 보자. (SW Expert Academy 문제에서 비교) char 1000개의 배열 a를 for를 이용해 b에 복사한다. #include #include /* memcpy test */ #define MAX (100.. 2023. 8. 15.
메모리 주소를 기록하여 배열에 접근하기 삼성 C형 전체 링크 참고 - 포인터의 크기 (Size of Pointer) - 삼성 SW 역량 시험 환경 memoryTest에서 memory[] 없이 memory 배열에 0 ~ 9를 할당해보자. #include void memoryAllocation(char address[], char memory[]) { } void memoryTest(char address[]) { } int main() { char address[10] = { 0 }; char memory[100] = { 0 }; for (int i = 0; i < 10; i++) printf("%d ", memory[i]); putchar('\n'); memoryAllocation(address, memory); memoryTest(addre.. 2023. 7. 30.
C++ - 형변환 연산자 (casting operators) C, C++ 전체 링크 static_cast 컴파일 시 형변환 dynamic_cast 런타임 시 형변환 const_cast 상수형 포인터에서 const 제한을 제거 reinterpret_cast C의 형변환과 유사 static_cast static_cast는 형변환이 적절한지 컴파일 시 체크한다. 즉, 적절한 형변환이 아니면 강제로 형식을 변환하지 않는다. 링크에서는 TEST class에서 (int) 변환에 대한 type casting을 정의해줬으므로 적절환 형변환이 가능했고, static_cast로 형변환이 적절하다고 판단할 수 있다. static_cast는 파생 클래스의 형식을 기본 형식(부모 클래스)으로 캐스팅하는 것을 허용한다. 이전 예제에서 아래의 코드를 추가해서 실행해보자. #include #.. 2021. 8. 26.
C++ - virtual, type casting C, C++ 전체 링크 이전 글에서 다시 virtual 키워드를 지우고, main을 아래와 같이 작성해보자. FOOD type에 MILK로 객체를 생성한 후, SNACK으로 type casting하여 printName을 호출한다. #include #include using namespace std; class FOOD { private: int price = 0; public: void printName() { cout 2021. 8. 15.
C++ - 상수형 메서드와 mutable, const_cast<> C, C++ 전체 링크 링크를 참고하여 다시 아래의 코드를 보자. 여기서 printValue는 value1, value2를 출력만 할 뿐, 수정은 하지 않는다. #include #include using namespace std; class TEST { public: int value1; int value2; TEST() { cout 2021. 7. 28.
해시 응용 : 2차원 배열 탐색 삼성 B형 전체 링크 참고 - 해시 테이블 Hash Table - 해시 테이블 추가, 삭제, 수정, 검색 - 해시 응용 - 2차원 배열 탐색 - 해시 응용 - Rush Hour Puzzle (2차원 배열 탐색 응용) - 해시 테이블 성능 비교 아래와 같은 15x15 2차원 배열에서 오른쪽의 4x4 조각이 총 몇 개 있는지 찾아보자. 실제 B형 문제라면, 아래의 코드에서 findPiece 함수를 만들면 된다. #include int N = 15; int M = 4; char MAP[15][15] = { { 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, }, { 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, }, { 0, 0, 1, 0, 0.. 2021. 3. 9.
반응형