반응형

분류 전체보기 624

[G5] 백준 21608번 상어 초등학교 C++ 구현

리뷰 https://www.acmicpc.net/problem/21608빡구현 문제.. 설계를 초반에 잘 하고 넘어가야 코드 수정하는 일이 적어질 것 같다.for문, while문의 지옥을 맛본 문제  전역 변수n : 주어지는 공간의 한 변의 길이lst : 주어지는 2차원 공강을 저장하기 위한 정수형 2차 배열dx, dy : 상하좌우 탐색을 위한 방향 배열friends : 좋아하는 친구 번호를 저장하기 위한 정수형 벡터 배열Pos : 각 학생의 존재 여부와 좌표를 저장하기 위한 구조체poses : 학생 번호를 인덱스로 관리하기 위한 Pos타입 배열Prio : 학생을 배치할 때 우선순위로 사용하기 위한 구조체, 주변 친구의 수 c순으로 내림차순, 주변 빈칸의 수 e순으로 내림차순, 행 번호 x순으로 오름차순..

[G4] 백준 17144번 미세먼지 안녕! C++ 구현, 시뮬레이션

리뷰 https://www.acmicpc.net/problem/17144간만에 풀어보는 100줄 이상 되는 구현 문제  전역 변수r, c, t : 행의 크기 r, 열의 크기 c, 공기 청정기를 작동할 횟수 tlst : 맵의 상태를 저장하기 위한 2차 정수 배열dx, dy : 공기 청정기 및 미세 먼지 확산 시뮬레이션을 위한 방향 배열Air : 공기 청정기의 위치를 표시하기 위한 구조체cleaner : 공기 청정기 위치를 저장하기 위한 Air타입 배열Dust : 맵에 존재하는 미세먼지 정보를 표시하기 위한 구조체 함수1. inputvoid input() 변수 및 맵 정보와 공기 청정기 정보를 입력받고 저장하기 위한 함수r, c, t를 입력 받고 공기 청정기의 인덱스로 사용할 정수형 변수 idx를 0으로 초..

[D4] SWEA [S/W 문제해결 기본] 2일차 - Ladder1 C++ 구현, 시뮬레이션, 브루트포스 알고리즘

리뷰  SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com진짜 맞왜틀을 엄청 외쳤는데 진짜 맞왜틀이였다, SWEA의 기본 문제들 처럼 테스트케이스의 개수가 주어지는 것이 아닌, 테스트 케이스는 10개 고정이고 각 문제의 번호가 맵 입력 전에 주어지는 구조였다.첫 번째 케이스만 맞고 나머지가 오답 처리가 된다면 꼭 Input파일을 다운받아 한번 확인해 보길 바란다.  전역 변수t : 각 문제의 번호를 입력 받을 변수lst : 맵 정보를 입력 받아 저장할 정수형 2차 배열v : 가로 선을 만나 꺾인 경우의 방문 처리를 위한 정수형 3차 배열dy : 좌우로 이동하기 위한 방향 배열 함수1. inputvoid input() ..

[P5] 백준 3015번 오아시스 재결합 C++ 스택, 해시맵

리뷰 https://www.acmicpc.net/problem/3015만만치 않은 스택 문제였다, 메모장을 키고 여러가지 케이스를 대입하고 나서야 풀린 문제풀고 나서 친구와 코드 리뷰를 해보니 내 코드는 딱히 좋은 풀이 방법은 아니였다.굳이 unordered_map을 사용하지 않고, 스택을 pair로 관리하여 cnt를 관리하는 최적화가 있으니 참고하길 바란다. + ans만 long long타입으로 해도 된다, 난 귀찮아서 모두 long long으로 해서 메모리가 꽤 커졌다.  전역 변수n : 주어지는 정수의 개수nodes : 정수를 저장하기 위한 배열cnt : 스택 상에 존재하는 정수의 개수를 표시하기 위한 해시맵stack : 스택 함수없음  문제풀이n을 입력 받고, n개의 정수를 nodes배열에 입력 ..

임베디드 IoT, MQTT

개요신뢰성 있는 데이터 전송 및 원격제어를 위해 만들어진 프로토콜 ( ISO 표준 )열악한 네트워크 환경에서 센서 하나 정도 달린 작은 기기들의 데이터 전송 및 원격제어를 위해 만들어짐→ 임베디드 장치에 알맞은 프로토콜이다 실시간, 최소 전력, 신뢰성 있는 비동기적 메시징 방식 ( TCP/IP 기반 )경량 프로토콜이벤트 방식의 N:N 통신 지원임베디드 IoT에 필수적인 기능만 모여 있다.  구성MQTT에는 3개의 구성원이 존재한다.Brokerpublishersubscriber  BrokerBroker는 메시지가 들어오는 통로이다.반드시 Broker를 통해서만 통신이 가능하다메시지의 전송 여부, 에러 여부를 확인할 수 있다. Publish / Subscribe누구나 발행/구독을 할 수 있으며, 구독과 발행..

임베디드/IoT 2024.11.11

[G4] 백준 14500번 테트로미노 C++ 구현, 백트래킹

리뷰 https://www.acmicpc.net/problem/14500각 위치마다 일반적인 4방향 백트래킹을 돌린다. ㅗ모양은 방향배열로 알 수 없어 해당 부분만 추가로 체크해 준다.ㅓㅗㅜㅏ 네개만 체크했다가 한번 틀렸다, 체크해야할 모양은 총 8개이다.  전역 변수n, m : 맵의 세로 길이 n, 맵의 가로 길이 mans : 정답을 저장하고 출력하기 위한 변수dx, dy : 8방향 탐색을 위한 방향 배열lst : 맵 정보를 저장하기 위한 정수형 2차 배열v : 방문 표시를 해주기 위한 정수형 2차 배열h : ㅗ모양을 했을때 각 모양의 값을 저장하기 위한 정수형 배열 함수1. inputvoid input() n, m을 입력 받고 맵 정보인 lst배열을 입력받기 위한 함수 2. btvoid bt(int ..

Boost.asio I/O TCP 소켓 동기적 읽기

개요TCP 소켓에서 읽는다는 것은 이 소켓에 연결된 원격 프로그램이 보낸 데이터를 받는다는 의미다.Boost.asio가 제공하는 소켓을 사용해 데이터를 수신하는 가장 간단한 방법은 동기적으로 읽는 것이다.쓰기와 마찬가지로 동기적 방식은 실행 중인 스레드를 멈추게 하고, 데이터를 모두 읽거나 오류가 발생하면 멈춘 스레드를 다시 풀어준다. Boost.asio 라이브러리로 소켓에서 데이터를 읽는 방법 중 가장 기본적인 방법이다.이 메서드는 쓸 수 있는 버퍼를 인자로 받고, 소켓에서 읽은 일부 데이터를 버퍼에 쓴다.이 함수가 성공하면 몇 바이트나 읽었는지를 반환한다.이 메서드가 몇 바이트를 읽을지는 제어할 수 없다.다만 오류가 나지 않는 한 적어도 한 바이트 이상을 읽는다는 것을 보장한다.일반적으로 소켓에서 일..

Boost.asio I/O TCP 소켓 동기적 쓰기

개요TCP 소켓에 쓴다는 것은 이 소켓에 연결된 원격 어플리케이션으로 데이터를 보내는 출력 연산을 한다는 뜻이다.Boost.asio가 제공하는 소켓 연산 중 가장 간단하게 데이터를 보내는 방법은 동기화 쓰기다.동기적으로 소켓에 쓰기 연산을 하는 메서드와 함수는 실행 중인 스레드를 멈추게 하며, 데이터가 소켓에 쓰이거나 오류를 발생하면 멈춘 스레드를 풀어준다. Boost.asio 라이브러리가 제공하는 가장 기본적은 소켓 쓰기 연산 방법은 write_some() 메서드이다.이 메서드는 결합 버퍼를 나타내는 객체를 인자로 받으며, 이름에서 알 수 있듯이 버퍼의 데이터 일부를 소켓에 쓴다.만약, 메서드가 성공하면 몇 바이트나 썼는지를 반환한다.여기서 중요한 점은 이 메서드가 buffers 인자를 통해 받은 데이..

Boost.asio I/O 가변 크기 버퍼, 스트림 버퍼

개요데이터가 새로 추가될 때마다 동적으로 크기가 커지는 버퍼를 확장 가능한 버퍼라고 한다.이러한 버퍼는 소켓에서 데이터를 읽을 때 들어오는 메시지의 크기를 알 수 없을 때 주로 사용한다. 어떤 어플리케이션 계층 프로토콜은 메시지의 크기를 정해놓지 않는다.그 대신 메시지의 경계를 나타내는 일련의 기호 값들을 메시지의 끝에 덧붙이거나 전송 계층의 파일 끝 메시지를 전송하여 메시지를 모두 전송했다는 것을 알린다. Boost.asio 라이브러리에서는 동적으로 확장할 수 있는 버퍼와 이를 받는 함수 모두 제공한다.  asio::streambuf확장 가능한 스트림 기반 버퍼는 Boost.asio에서 asio::streambuf 클래스로 표시된다.streambuf 클래스는 TSL 스트림 클래스가 필요한 상황에서도 사..

Boost.asio I/O 고정 크기 버퍼

개요다른 I/O와 마찬가지로, 네트워크 I/O에서도 메모리 버퍼를 사용한다.메모리 버퍼란, 프로세스의 주소 영역 내에 연속된 메모리 공간으로, 데이터를 저장하는데 사용한다. 어떤 입력 연산을 실행했다면, 프로세스에 도착한 데이터는 주소 공간 어딘가에 저장되어야만 처리할 수 있다. 즉, 버퍼가 있어야 I/O를 처리할 수 있다는 것이다. 입력 연산을 실행하기 전에 버퍼를 할당해둬야 하고 입력 연산 중에 데이터를 저장할 곳으로 이 버퍼를 사용해야 한다. 입력 연산이 끝나면, 버퍼에 입력 데이터가 저장되어 있어 나중에 어플리케이션이 처리할 수 있다. 이와 마찬가지로 출력 연산을 실행하기 전에는 데이터를 준비하여 출력 연산에 쓸 출력 버퍼에 저장해둬야 한다. 그러면 출력 버퍼가 데이터의 소스가 된다. 버퍼는 네트..

728x90
반응형