본문 바로가기

전체 글

(38)
[C++] std::unique 동작 원리 💡unique를 쓰면 왜 뒤에 이상한 값이 남는지 헷갈려서 정리했습니다. 처음에는 unique가 중복을 지워 주는 함수인 줄 알았다. 그런데 벡터에 써 보니 크기(size)가 그대로였고, 뒤쪽에 원래 값들이 남아 있었다. 이 과정에서 unique가 정확히 어떻게 동작하는지, iterator가 무엇을 가리키는지 정리한다. 예를 들어 {1, 2, 2, 3, 4, 5, 5, 5, 6, 6}에 unique를 호출하면, 앞쪽에는 1 2 3 4 5 6이 오고 그 뒤에 5 5 6 6이 따라온다.1. unique의 동작 원리unique는 새로운 공간을 만들지 않는다. 같은 벡터 안에서 두 개의 iterator를 움직이며 값을 덮어쓰는 in-place 알고리즘이다. result는 마지막으로 확정된 unique 값의 위..
[코테] 폴리오미노 회전 매칭 문제 💡프로그래머스 '퍼즐 조각 채우기' 문제를 풀면서 도형 회전과 매칭 과정을 정리했습니다.https://school.programmers.co.kr/learn/courses/30/lessons/84021 문제 자체는 단순하다. table에는 1로 표시된 도형 조각들이 있고, game_board에는 0으로 표시된 빈칸들이 있다. 연결된 빈칸 하나의 모양이 테이블의 도형과 회전을 고려해 일치하면 그 공간을 채울 수 있다. BFS와 좌표 변환을 이용하는 문제였지만, 구현 과정에서 실수하기 쉬운 부분이 많았다. 전체 파이프라인BFS로 table의 연결된 1들을 도형 단위로 추출도형을 크기(칸 개수, cnt)별로 그룹핑해서 비교 후보를 줄임game_board의 빈 칸 덩어리도 BFS로 추출같은 크기의 table ..
[에러 1] free(): invalid pointer가 났던 이유 💡프로그래머스에서 ‘퍼즐 조각 채우기’ 문제를 풀다가 발생한 오류를 기록해 놓은 글입니다.https://school.programmers.co.kr/learn/courses/30/lessons/84021 테이블(table)에 그려진 도형과 게임 보드(game_board)의 빈 공간을 매칭시키는 문제를 풀고 있었다. BFS로 연결된 칸들을 하나의 도형으로 묶고, 도형의 크기(cnt)별로 그룹을 나눠 탐색 횟수를 줄이는 구조로 설계했다. 문제는 이 그룹을 저장하는 벡터의 크기를 잘못 잡으면서 시작됐다.에러 발생free(): invalid pointer테스트 결과 (~˘▾˘)~2개 중 0개 성공BFS로 테이블에 있는 각 도형의 칸 수를 세고, 크기에 따라 대표 좌표를 벡터(v_p)에 저장하려고 했다. 이를 ..
[C++] vector resize vs assign: 벡터를 재사용할 때 주의할 점 💡 전역 벡터를 여러 번 재사용할 때 반드시 알아야 하는 차이프로그래머스의 퍼즐 조각 채우기 문제를 풀다가 vector 크기를 설정하는 부분에서 오류가 났다. 이 과정에서 resize와 assign의 차이를 정리하고, 어떤 상황에서 assign을 써야 하는지 정리한다. 이 문제에는 크기가 같은 game_board와 table이 주어지고, 두 격자에 있는 도형의 모양이 같은지 판단해야 한다. 나는 table의 도형을 칸 개수(cnt)별로 미리 나눠 두었다. 이렇게 하면 v_p[cnt]로 같은 크기의 도형 목록에 바로 접근할 수 있고, 모든 도형을 비교하는 대신 크기가 같은 도형끼리만 비교하면 된다.1. resize의 동작vector v = {1, 2, 3};v.resize(5); // v = {1, ..
컨볼루션과 푸리에 변환의 관계 — \(Y(f) = X(f)\cdot H(f)\) 유도 💡 나중에 다시 볼 때를 위한 정리.목표시간 영역의 컨볼루션:\[ y(t) = \int_{-\infty}^{\infty} x(\tau) \cdot h(t-\tau) \, d\tau \]이걸 푸리에 변환하면 왜 곱셈이 되는지 유도한다.\[ Y(f) = X(f) \cdot H(f) \]핵심 트릭 2개 (먼저 파악하면 전체 흐름이 보임)트릭 1. 지수를 쪼갠다.\[ e^{-j2\pi ft} = e^{-j2\pi f(t-\tau)} \cdot e^{-j2\pi f\tau} \]→ \(h(t-\tau)\)랑 묶이는 항, \(x(\tau)\)랑 묶이는 항으로 분리하려고.트릭 2. \(u = t-\tau\) 치환.→ \(h(t-\tau)\cdot e^{-j2\pi f(t-\tau)}\) 에서 \(t-\tau\)를 ..
CT 컨볼루션 유도 -> \(y(t) = \int x(\tau)h(t-\tau)\,d\tau\) 가 되는 과정 💡 나중에 다시 볼 때를 위한 정리.목표\(x(t)\)를 LTI 시스템에 넣었을 때 출력이 왜 이게 되는지 유도한다.\[ y(t) = \int_{-\infty}^{\infty} x(\tau) \cdot h(t-\tau) \, d\tau \]이건 외우는 공식이 아니라 LTI 시스템의 두 성질에서 자연스럽게 나오는 결과다.사전 지식: \(\delta_\Delta(t)\) 란?\[ \delta_\Delta(t) = \begin{cases} \dfrac{1}{\Delta} & 0 \leq t 폭 = \(\Delta\), 높이 = \(1/\Delta\), 넓이 = 항상 1높이를 \(1/\Delta\)로 잡은 이유: \(\Delta \to 0\) 극한에서 신호가 사라지지 않고 살아남기 위한 설계 조건\[ \lim..
CT 컨볼루션(Continuous-Time Convolution) 유도 정리 CT 컨볼루션(Continuous-Time Convolution) 유도 정리💡 나중에 다시 볼 때를 위한 정리. 유도 과정에서 헷갈렸던 포인트 위주로 정리했다.0. 이 글의 목적임의의 연속 신호 \(x(t)\)를 LTI(Linear Time-Invariant) 시스템에 입력했을 때의 출력 \(y(t)\)를 계산하는 공식이 왜 아래와 같은 형태를 갖는지 유도해보자.\[ y(t) = \int_{-\infty}^{\infty} x(\tau) h(t - \tau) d\tau \]1. 핵심 아이디어\(x(t)\)를 아주 작은 임펄스(충격) 조각들의 합으로 표현하는 것이 시작이다. LTI 시스템의 성질(선형성 및 시불변성) 덕분에, 전체 출력 \(y(t)\)는 각 조각에 대한 개별 응답을 모두 합산하여 구할 수 ..
디바이스 드라이버 올릴 때, 발생한 오류(다른 디바이스 드라이버가 사용 중) 1. PetaLinux에서 발생한 오류PetaLinux에서 드라이버를 로드하려고 했을 때 다음과 같은 오류가 발생했다.sudo depmod -a; sudo modprobe -r ledmutex_driver;sudo modprobe ledmutex_driverled_device: gpio_request failed: -16led_device: gpio_request failed: -16modprobe: can't load module ledmutex_driver (extra/ledmutex_driver.ko): Device or resource busy❌ 이 오류의 핵심은 gpio_request failed: -16이다. 여기서 -16은 리눅스 커널의 EBUSY에 해당한다. 의미는 해당 GPIO 자원이 이..