목록전체 글 (59)
이우의 개발일지
DP, 다이나믹 프로그래밍이란? -> 하나의 문제를 단 한번만 풀도록 하는 알고리즘 설계 기법입니다. Why DP를 사용할까?그냥 사용하면 사실 재귀방식과 똑같이 사용할 수 있다. 하지만, 일반적인 코딩테스트 같은 경우 시간제한이 걸려있기 때문에 동일한 작은 문제를 여러번 풀면 무조건적으로 시간초과가 뜨게 된다. 예를 들어, 피보나치 수열을 그 예로 들 수 있다.#include int dp(int x){ if( x == 1) return 1; if( x == 2) return 1; return dp(x - 1) + dp ( x - 2); } 위 처럼 코딩을 하게 된다면, 50번째만 가도 굉장히 오래 걸리게 된다. #include int d[100];int dp(int x){ ..
다이나믹셀 XM430 제어 및 통신 오류 발생 원인 분석현재 제어하고 있는 다이나믹셀 XM430 시리즈는 편리한 SDK와 Wizard 소프트웨어 툴을 통해 상태를 확인하고 컨트롤할 수 있다는 장점이 있는 모터다. 평소 안정적으로 작동해왔으나, 최근 제어 명령을 전달하는 과정에서 처음 보는 오류가 발생하여 원인 분석과 해결을 시도하게 되었다. 오류가 떴던 부분들Failed to send profile velocity values[ID:001] groupSyncWriteVelocity addParam failed 이 오류는 다이나믹셀에 속도 관련 명령을 전송할 때 발생하며, 정상적으로 명령이 수신되면 COMM_SUCCESS라는 메시지가 반환되도록 설정되어 있다. 그러나 이 메시지가 반환되지 않을 경우 오류로..
C++에서 TTS/ STT 기능 구현하기 현재 연구하는 모듈 중 C++ 환경에서 코드의 유기성을 위해 파이썬을 사용하지 않고 STT(Speech to Text)와 TTS(Text to Speech) 기능을 구현할려 했다. 방법은 오디오 데이터를 Base 64로 인코딩을 한 후 libcurl 라이브러리를 이용해서 Google Cloud API에 HTTP 요청을 할려했다. 하지만, 이 과정에서 파이썬은 간단하게 라이브러리 함수를 사용하면 모든게 편하지만 C++에서 할려면 인증, 데이터 인코딩, 요청 형식 등의 세부 설정을 해줘야했다... json 파일을 만들어서 Google Cloud에 인증을 Key와 ID 등을 다 입력하고, curl을 통해 HTTP 요청을 했지만..... 실패...! 결론적으로는 403..
Chat gpt API를 C++ 이용일단 C++에서는 라이브러리에서는 API 라이브러리가 잘 안되어있기 때문에 직접적으로 쓰기 어렵습니다.(curl 라이브러리를 써서 HTTP 요청하는 방법도 있긴한데... 복잡합니다..)따라서, 나는 C++에서 만든 텍스트를 가지고 그 텍스트를 GPT 실행 python 파일을 실행시켜 값을 다시 가져오는 식으로 진행하였습니다. 즉, C++ 코드 중간에 python 파일을 개별로 실행시키고 그 값을 받아와 C++안에서 다시 처리하는 식입니다. C++ GPT 실행 코드 std::string execGPTScript(const std::string& prompt) { std::string command = "python3 gpt_script.py \"" + promp..
RAII (Resource Acquisition Is Initialization)이란? 자원의 안전한 사용을 위해 객체가 쓰이는 스코프를 벗어나면 자원을 자동으로 해제해주는 기법입니다. 즉, 변수가 선언되거나 파일을 열 때 자원이 할당 되고 해당 스코프에서 벗어나면 자동으로 해제되는 기법입니다. 보통 자원 획득이 필요한 경우, 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하는 것입니다. (프로그램을 개발하다보면 동적 메모리 할당, 파일 열기, 락 등 자원 획득을 많이 하는데, 이러한 자원 획득을 담당하는 클래스를 만들어 그 클래스의 생성자에서만 자원 획득을 하는 것입니다.)RAII의 핵심 원리생성과 동시에 리소스 획득: 객체가 생성될 때 필요한 리소스를 획득하고, 생성자..
소프티어 징검다리 문제 입력예제1 5 3 2 1 4 5 출력예제1 3 징검다리 풀이 이 문제는 최장 증가 부분 수열 알고리즘을 이용해서 풀이를 하는 문제이다. 최장 증가 부분 수열 알고리즘(LIS)이란? 원소가 n개인 배열의 일부 원소를 골라내서 만든 부분 수열 중, 각 원소가 이전 원소보다 크다는 조건을 만족하고, 그 길이가 최대인 부분 수열을 최장 증가 부분 수열이라고 합니다. LIS 알고리즘에는 DP 알고리즘을 사용하는 것이 유리하다. 아래 방식처럼 전체의 값을 1로 정의하고 만약 원래 값보다 체크하는 값이 크다면 max를 써서, 값을 새로 넣어주는 식으로 정의할 수 있다. for (int k=0; k 처음에는 이 문제를 재귀함수를 써서 사용을 했는데, 시간 복잡도가 O(2^n)이 나와서 시간초..
코드트리 Carry 피하기 문제 https://www.codetree.ai/problems/escaping-carry/description n개의 숫자가 주어지고, 그 숫자를 적절하게 골라 더했을 때 carry가 전혀 발생하지 않는 최대로 고를 수 있는 숫자의 수를 계산하는 프로그램을 작성해보세요.여기서 carry란, 수와 수를 더했을 때, 10의 자리를 넘기는 것을 말합니다. 예를 들어 3과 6을 더하면 9가 되고 자리수가 넘어가지않아 carry가 발생하지 않지만, 5와 7은 더하면 12가 되므로 carry가 발생합니다. 또, 81과 72를 더하면 일의 자리를 더할때는 carry가 발생하지 않더라도 십의 자리를 더할 때는 carry가 발생하게 되므로 불가능한 조합입니다. 즉, 각 자리수를 모두 각각 더..
코드트리 화면에 출력 문제 조건 : 시간제한(1초), 메모리 제한 (80MB) 화면에 출력 풀이1. BFS이 문제를 풀면서 한 가지 간과한 점이 있다. 처음 풀이를 풀 때 재귀함수로 풀이를 시작했으나, 시간초과가 뜨는 에러를 범했다. 재귀함수는 DFS와 똑같이 깊이 우선 탐색이라 한 경로를 끝까지 탐색하고, 목표 상태에 도달하면 그 값을 기록한 후 다른 경로를 탐색하는 방식이기 때문에 빠르게 최적의 값을 탐색할때는 적합하지 않다. 따라서, BFS를 사용하면 가까운 상태부터 탐색하며, 모든 경로를 확장하는 방식인데 이 방식은 최단 경로나 최소 동작 수를 찾을 때 유리한 알고리즘이다. 목표 상태에 처음으로 도달한 순간 항상 최단 경로 또는 최소 동작 수에 해당하기 때문에 목표 상태에 도달하면 바로 종료..