본문 바로가기

분류 전체보기96

[C/C++] 정올 - 달팽이 삼각형 #1337 문제 삼각형의 높이 N을 입력받아서 아래와 같이 숫자 0부터 달팽이 모양으로 차례대로 채워진 삼각형을 출력하는 프로그램을 작성하시오. 왼쪽 위부터 시계방향으로 오른쪽 아래로 이동하면서 숫자 0부터 N개를 채우고 다시 왼쪽으로, 다음은 위쪽으로 반복하면서 채워 나간다. (숫자 9 다음에는 0부터 다시 시작한다.) 2차원 배열에서, 삼각형 모양으로 출력되야 하므로 배열 전체를 사용하지 않는 값(예를들어 -1) 로 채운다. 이때 가변길이배열은 런타임 초기화가 불가능하므로, cstring 헤더의 memset 함수를 활용한다. int arr[n][n]; memset(arr,-1,sizeof(int)*n*n); int m = n; int x = -1; int y = -1; int num.. 2024. 4. 17.
[C/C++] 정올 - 달팽이 사각형 #1707 문제 정사각형의 크기를 입력 받은 후 시계 방향으로 돌면서 다음과 같은 형태로 출력하는 프로그램을 작성하시오. (1) 가장 왼쪽 위의 좌표부터 차례로 숫자를 대입 시킨다. (2) 오른쪽으로 채워 나가다가 끝이면 다시 아래 → 왼쪽 → 위 →오른쪽의 순으로 모두 채워질 때까지 반복한다. 배열에 원소를 넣을때 마다, cnt 값을 올린다. cnt 값이 n*n 이하일때까지 while 문을 돌린다. while 문 내에 for 문이 4 개 포함되어있지만, 루프에 문제가 생기지는 않는다. for 문이 반복되는 조건은 m 이 1이상일 때이기 때문이다. n*n 값이 채워지는 경우 m은 0이 되므로 for문은 돌지 않고 정상적으로 의도한 만큼 while 문은 돌고 종료된다. int arr[n].. 2024. 4. 17.
[C/C++] 동적 2차원 배열과 가변길이배열(VLA) C언어의 표준에서는 고정된 크기의 배열을 선언할 때 배열의 크기를 컴파일 시간에 알 수 있어야 했다. 그렇기 때문에 C99 표준 이전에는 배열의 크기로 변수를 사용하는 것이 허용되지 않았다. 하지만 C99부터는 '가변 길이 배열'(Variable Length Arrays, VLAs)의 개념이 도입되어 실행 시간에 배열의 크기를 결정할 수 있게 되었습니다. 즉, 배열의 사이즈에 변수가 들어가도 됐다. 그 이전에는 동적할당을 이용하여, 이 문제를 해결했다. 아래는 VLA 를 사용하여 입력받은 높이와 너비에 해당하는 사각형을 숫자로 채우는 코드이다. #include int main(){ int n; int m; while (1){ scanf("%d",&n); scanf("%d",&m); if ( n > 0 &.. 2024. 4. 11.
[C/C++] C++ 에서의 콜백함수 C++에서 콜백 함수의 사용C++에서 콜백 함수는 여전히 중요하며, C언어에서의 사용법을 기반으로 더 다양하고 강력한 방법으로 발전하였다.기본적으로, C++에서는 함수 포인터, 함수 객체, 람다 표현식 등을 통해 콜백 함수를 구현할 수 있다. 함수 포인터: C언어의 콜백 함수 구현 방식과 유사하게, C++에서도 함수 포인터를 사용해 콜백을 구현할 수 있다. 하지만, 이 방법은 객체 지향적 특성을 충분히 활용하지 못하는 단점이 있다.함수 객체 (Function Objects 또는 Functors): C++에서는 객체를 함수처럼 호출할 수 있는 함수 객체를 사용하여 콜백을 구현할 수 있다. 이는 클래스 내에 operator()를 오버로딩함으로써 가능하다. 이 방법은 상태를 유지할 수 있는 장점이 있으며, 객.. 2024. 4. 7.
WSL2 D드라이브로 마이그레이션하기 WSL2(Windows Subsystem for Linux 2)에서 기본 저장 위치를 C 드라이브에서 D 드라이브로 변경하기 기존 WSL2 인스턴스를 내보낸 후 D 드라이브에 다시 가져오는 방법 WSL 인스턴스 내보내기: 현재 사용 중인 WSL 인스턴스를 tar 파일로 내보낸다. PowerShell을 관리자 권한으로 실행한 후 다음 명령어를 사용한다. (여기서는 Ubuntu라는 이름의 WSL 인스턴스를 예로 들었. 실제 사용 중인 인스턴스 이름으로 변경해야 한다.) wsl --export Ubuntu D:\wsl_backup\Ubuntu.tar​ 기존 WSL 인스턴스 제거: 내보낸 후에는 기존 인스턴스를 제거한다. wsl --unregister Ubuntu​ 새 위치에 WSL 인스턴스 가져오기: 내보낸 .. 2024. 4. 4.
[C/C++] 콜백함수 (Callback Function) 콜백 함수란?콜백 함수는 다른 코드의 인자로 전달되어, 그 코드에 의해 어느 시점에 호출되는 함수인데특히 비동기적 작업, 이벤트 리스닝, 또는 특정 조건 하에서 실행되어야 할 코드를 처리할 때 유용하다.C언어에서 콜백 함수는 함수 포인터를 통해 구현되는데, 함수 포인터는 함수의 주소를 저장하는 변수로, 이를 통해 함수를 다른 함수의 매개변수로 전달하거나 변수에 저장한 함수를 호출할 수 있다.콜백 함수의 구현콜백 함수를 사용하는 기본적인 방법은 다음과 같다함수 포인터 선언: 콜백으로 사용될 함수의 타입에 맞는 함수 포인터를 먼저 선언한다. 이는 콜백 함수의 인터페이스(시그니처)를 정의한다.콜백 함수 정의: 이후에 해당 함수 포인터 타입에 맞게 콜백 함수를 정의한다. 콜백 함수는 선언된 함수 포인터 타입의 .. 2024. 4. 1.
[C/C++] C언어에서의 객체지향 아래 코드는 구조체를 이용해 Stack 자료구조를 작성한 예시이다. typedef struct Stack { int top; // Index of the top element in the stack. Initially -1 because the stack is empty. unsigned capacity; // Maximum number of items that can be stored in the stack. int* array; // Pointer to the array that will store the stack's elements. } Stack; Stack* createStack(unsigned capacity) { Stack* stack = (Stack*) malloc(sizeof(Stack.. 2024. 3. 31.
vim 에서 ^M 일괄 삭제 보통 윈도우에서 작성된 텍스트를 리눅스 환경에서 열어볼때 발생한다. 각 OS마다 개행 문자가 다르기 때문인데, 아래의 vim 커맨드로 해결 가능하다. :%s/^M//g 문제는 저기 나온 ^M 이 문자가 아니라는 점인데, ctrl 키를 누른 상태에서 V+M 을 입력하면 된다. 2024. 3. 28.
X서버 관련 해결 방법 WSL2 gui 사용시, 윈도우 해상도 로 인해 gui 앱의 스케일이 매우 작을 경우 $ vim ~/.Xresources Xft.dpi: 144 #숫자는 취향에 맞게 변경 $ xrdb -merge ~/.Xresources​ xrdb 부분은 .bashrc 에 설정해야 매번 적용된다. gvim 실행시 g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed 오류 발생 시 sudo apt purge fcitx-module-dbus​ https://askubuntu.com/questions/1128343/g-is-dbus-connection-failed 2024. 3. 24.