목록전체 글 (114)
승코딩당당당
문제[C++] 백준 11279: 최대 힙 SILVER 2https://www.acmicpc.net/problem/11279 접근 방법이 문제는 최대 힙(Max Heap)을 직접 구현하는 대신,C++의 priority_queue를 이용해 처리하는 전형적인 자료구조 문제다. 문제의 규칙은 간단하다.입력값 x가 0이 아니면 → 자료구조에 값을 넣고입력값 x가 0이면비어 있으면 0 출력비어 있지 않으면 가장 큰 값을 출력하고 제거C++의 priority_queue는 기본적으로 가장 큰 값이 top에 오는 최대 힙 구조이기 때문에 문제 조건과 정확히 일치한다.따라서 별도의 힙 구현 없이 입력에 따라 push, top, pop만 사용하면 된다. 구현 시 주의할 점priority_queue는 기본이 내림차순(최대 ..
문제[C++] 백준 9375: 패션왕 신해빈 SILVER 3https://www.acmicpc.net/problem/9375 접근 방법이 문제는 옷의 이름은 필요 없고, 종류(type)별로 몇 개 있는지만 알면 되는 경우의 수 문제다.입력으로 (옷 이름, 옷 종류)가 들어오지만, 실제로 필요한 건 “종류별 개수”이기 때문에map을 사용해서 아래와 같이 저장했다.key : 옷의 종류value: 그 종류에 속하는 옷의 개수예를 들어, 아래와 같다면 각 종류별 선택지는 다음과 같다.headgear 2개eyewear 1개headgear: (안 씀) + 2개 중 하나 = 3가지eyewear: (안 씀) + 1개 중 하나 = 2가지따라서, 전체 경우의 수는 3 * 2 = 6이 된다.이를 일반화하면, 각 종류마다 ..
문제[C++] 백준 17219: 비밀번호 찾기 SILVER 4https://www.acmicpc.net/problem/17219 접근 방법이 문제는 사이트 주소가 주어졌을 때 해당 비밀번호를 빠르게 찾아 출력하는 문제다.핵심은 “탐색 속도”다. 처음에는 vector에 (사이트, 비밀번호) 쌍을 저장해 두고, 질문이 들어올 때마다 처음부터 끝까지 순회하며 찾는 방식으로 구현했다.하지만 이 방식은 매 질의마다 선형 탐색(O(N))이 필요해서, 입력 크기가 커지면 결국 시간 초과가 발생한다. 그래서 접근 방식을 바꿔, 키를 기준으로 바로 값을 찾을 수 있는 자료구조를 사용해야겠다고 판단했다.여기서 사용한 것이 바로 map이다. map을 사용한 풀이 아이디어map은key → value 형태로 데이터를 저장하고..
문제[C++] 백준 1456: 거의 소수 GOLD 5https://www.acmicpc.net/problem/1456 접근 방법이 문제는 구간 [A, B] 안에 있는 거의 소수(= 어떤 소수 p에 대해 p², p³, p⁴ … 꼴인 수)의 개수를 세는 문제다.모든 수를 일일이 나눠보면 범위가 너무 커서 불가능하므로, "소수의 거듭제곱을 만들어서 세는 방식”으로 접근한다. 1. √B 까지의 소수 먼저 구하기어떤 거의 소수 p^k가 B 이하라면, 밑이 되는 소수 p는 반드시 p ≤ √B를 만족한다.그래서 먼저 2 ~ √B 범위에 대해 에라토스테네스의 체로 소수를 구한다.vector vect;for (LL i = 0; i 2. 각 소수 p에 대해 p², p³, p⁴… 생성해서 카운트i가 소수라면 i^2부터 ..
이번 실습에서는 STM32 Nucleo 보드(STM32L0 계열)를 기반으로 HAL 라이브러리를 활용하여 ADC, Timer, PWM, GPIO 인터럽트, UART 통신을 함께 사용하는 복합 예제를 구현해보았다. ADC를 통해 LM35 온도 센서의 아날로그 값을 읽고, Timer 인터럽트를 이용해 1초 주기의 주기 동작을 수행하며,TIM2의 PWM 기능을 활용해 PWM 듀티 비를 단계적으로 변경한다.또한 버튼과 진동 센서를 외부 인터럽트(EXTI) 방식으로 처리하여 이벤트 기반 입력 처리 구조를 확인한다. UART 통신을 통해 측정된 값과 상태 메시지를 출력함으로써, 임베디드 시스템에서 자주 사용되는센서 입력 → 타이머 기반 제어 → PWM 출력 → 시리얼 디버깅의 전체 흐름을 하나의 프로젝트 안에서 실..
마이크로컨트롤러에서 Timer(System Timer)는단순한 시간 측정을 넘어, 인터럽트 발생, 외부 이벤트 계수, 신호 캡처, 그리고 PWM 파형 생성까지 담당하는 핵심 주변장치이다. STM32를 포함한 Cortex-M 계열 MCU는 코어 내부에 SysTick(System Timer)를 기본적으로 제공하며,이 타이머는 주로 1ms 주기의 시스템 시간 관리와 RTOS의 태스크 스케줄링, Delay 구현 등에 활용된다. 또한 MCU 내부의 일반 Timer는 Prescaler(PSC), Counter(CNT), Auto Reload Register(ARR), Capture/Compare Register(CCR)와 같은 레지스터를 기반으로 동작하며, 다양한 모드를 통해 시간 기반 제어와 신호 처리를 가능하게..
이번 글에서는 STM32 Nucleo-L073RZ 보드를 이용해 LM35 아날로그 온도 센서의 출력을 ADC로 읽고, VDDA 보정을 적용해 보다 정확한 온도를 계산하는 방법을 정리한다. 단순히 ADC 값만 읽는 것이 아니라, SYS_GetBatteryLevel()로 현재 보드의 VDDA(전원 전압)를 실시간으로 측정한 뒤, 이를 이용해 LM35 센서의 출력 전압을 보정하고 섭씨 온도로 변환하는 과정을 코드와 함께 살펴본다. 실습에서는 내부 ADC를 ADC 채널 0으로 설정하고, ADC_ReadChannels()로 읽어온 값을 바탕으로 아래와 같은 계산식을 사용해 온도를 구한다. temp = ((measuredLevel * Vdda) / 40950); 이때 40950라는 상수는 12비트 ADC 해상도(0..
문제[C++] 프로그래머스: 점프와 순간 이동 LV.2https://school.programmers.co.kr/learn/courses/30/lessons/12980 접근 방법이 문제는 점프(+1)는 비용이 들고, 순간이동(*2)은 비용이 들지 않는다는 점이 핵심이다.따라서 가능한 한 순간이동을 최대한 활용하는 방향으로 생각해야 한다. 0에서 n으로 가는 과정보다, n에서 0으로 거꾸로 내려오는 방식으로 접근하면 훨씬 단순해진다.현재 값이 짝수라면→ 직전에 순간이동을 통해 왔다고 볼 수 있으므로→ n /= 2 만 수행한다.현재 값이 홀수라면→ 순간이동이 불가능하므로→ n - 1로 이동하며 점프를 한 번 사용한다.이 과정을 반복하면, 결국 홀수일 때 사용한 점프의 횟수가 최소 에너지 소모량이 된다. 구..
이 코드는 STM32L0 NUCLEO 보드에서보드 부팅 시 UART로 “Hello World”를 PuTTY에 출력하고,진동 센서(또는 외부 인터럽트 입력)의 발생 횟수에 따라 LED를 점멸시키며,USER 버튼을 누르면 진동 카운트를 리셋하는 인터럽트 기반 동작을 구현한 예제다.단순히 GPIO를 토글하는 수준을 넘어서,UART 통신 초기화BSP(Basic Support Package)를 이용한 LED / 버튼 추상화EXTI 인터럽트 콜백 활용까지 한 번에 연습하는 코드라고 보면 된다. 먼저 CubeMX에서 다음과 같이 PA2와 PA3을 각각 USART2_TX, RX로 설정해준다. /* USER CODE BEGIN Header *//** ************************************..
임베디드 시스템은 하드웨어와 소프트웨어가 긴밀하게 연결된 구조를 가지며, 그 중심에는 센서와 액츄에이터, 그리고 이들을 연결하는 다양한 인터페이스가 존재한다.이 글에서는 임베디드 시스템의 기본적인 하드웨어 구조부터 입력 센서와 출력 액츄에이터의 역할을 살펴보고, 아날로그·디지털 신호의 차이와 신호 변환 과정에 대해 정리한다. 또한 MCU와 주변 장치 간 통신을 가능하게 하는 인터페이스 개념을 중심으로 ADC, GPIO, UART, I2C, SPI와 같은 대표적인 통신 방식의 특징을 비교하며 이해한다.통신의 방향성과 데이터 전송 방식, 데이터율(Baud rate, Bit rate)의 개념까지 함께 다루어 임베디드 시스템에서 인터페이스가 왜 중요한지를 흐름 있게 설명한다. 마지막으로 UART 기반 시리얼 통..