본문 바로가기

c++

(12)
메모리 관리(3) - 똑똑하게 포인터 사용하자 한 주 정도 포스팅이 밀린 것 같다. 다시 얼른 정리해야지 뭐든지 한 번 밀리면 계속 밀리는 것 같다. 게으름에도 관성이 있다. 하루가 이틀이 되고 이틀이 일주일이 된다. 어쨋든, 메모리 관리 관련해서 다시 이어서 써보자. 0. 서론 이전 포스팅에서는 컴퓨터의 메모리가 무엇인지? C/C++ 동네에서는 어떻게 메모리에 접근하며 메모리를 사용하는지에 대해 정리하였다. 이번에는 스마트 포인터라는 C++로 넘어오면서 추가된 개념을 정리해보려고 한다. 이름 그대로 똑똑한 포인터이다. 왜 스마트 포인터가 등장했을까? 포인터는 앞서 다뤘듯이 메모리에 접근할 수 있는 주소값을 담고있는 변수이다. 그리고 우리는 이 변수를 예민하게 다뤄야한다. 메모리를 할당받으면 다시 메모리르 해제해줘야하는 꽤나 귀찮은 작업들을 매번 해..
메모리 관리(2) - 포인터의 사용법과 사용이유 저번에는 간단하게 포인터의 개념만 정리를 해보았는데 이번에는 포인터를 사용하는 방법과 프로그래밍에서 왜 데이터의 주소를 알아야 하는지에 대해 정리해보려고 한다. 1. 포인터의 사용법 void 함수( ) { int num = 5; int* ptr = # } 자, 위의 코드블럭을 살펴보면 num 이라는 변수에 5 라는 값이 선언되었다. 그렇다면 컴퓨터의 메모리에는 뭐라고 적어놨을까? 구제적인 예를 든다면,, "0012FFCC" 라는 메모리주소에 "00 00 00 05" 라는 정보가 기록될 것이다. 그럼 위의 코드에서 포인터 ptr은 어떤값을 가지고 있을까? 이전 포스팅에서 정리한대로 포인터는 메모리 주소를 저장하는 변수이다. 따라서 변수 ptr은 0012FFCC 라는 주소를 가지고 있을 것이다. 1-..
메모리 관리(1) - 포인터(pointer) 1) 서두 자, C,C++를 하다보면 피할 수 없는 존재가 있다. 바로, 포인터다. 컴퓨터의 메모리에 접근하여 코딩을 할 수 있는건 양날의 검일것이다. 컴퓨터와 가깝다는건 좋으면서 위험한 일이니깐.. 메모리에 접근한다는건 어떤 것일까? 그전에 메모리는 무엇일까? 오늘은 메모리의 개념과 C++에서 메모리를 어떻게 접근하는지에 대해 정리해보려 한다. 2)본론 1. 메모리는 무엇일까? 영화 '이미테이션 게임' 의 실제 주인공인 엘런 튜링은 당시에 이미테이션 게임이라는 논문을 낸다. 해당 논문에서의 주내용은 인간을 따라하는 기계이다. 추후, 개념이 발전하여 인공지능의 개념의 초석이 된 내용이기도 하다. 기계가 어떻게 인간을 따라할 수 있었을까? 간단하게 인간이 일을 처리할 때 행동들을 잠깐 나열해보자. 문제가 ..
[2017 카카오코드 예선] 보행자 천국 문제 programmers.co.kr/learn/courses/30/lessons/1832 코딩테스트 연습 - 보행자 천국 3 3 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 6 3 6 [[0, 2, 0, 0, 0, 2], [0, 0, 2, 0, 1, 0], [1, 0, 0, 2, 2, 0]] 2 programmers.co.kr 문제설명 이 문제는 동적 계획법(Dynamic Programing, DP)으로 쉽게 풀 수 있는 문제이다. 출발지(0, 0) 에서부터 도착지점까지의 경우의 수를 구하는 과정을 동적 계획법을 활용하여 접근해보자. 문제의 특성상 특정 위치에서 추가되는 경우의 수는 2가지이다. 왼쪽에서 왔는지? 위쪽에서 왔는지? 아래는 이 경우에 대한 일반화를 시켜본 것이다. 따라서,..
[2017 카카오코드 예선] 카카오 프렌즈 컬러링북 문제 programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 문제설명 이 문제의 핵심질문은 그림판에 색칠된 영역들을 구할 수 있냐? 구분할 수 있냐? 로 정리할 수 있다. "영역의 크기"를 구하기 위해선 우리가 알고 있는 방법은 당연 DFS, BFS 이다. DFS, BFS 관련된 문제와 설명들은 구글링을 통해서 쉽게 접할 수 있을 것이다. 우선 모든 picture의 위치(i, j)에 접근하여 해당 위치가 영역체크를 하였는지에 대해 v..
C++ STL 다루기 - vector STL이란 ??STL은 C++에서 제공하는 라이브러리로 편리하게 별도의 구현없이 사용할 수 있는 도구이다. -> vector, list, map, pair, set 등등이 제공된다. vector가 뭘까?? vector는 정보(데이터)를 담을 수 있는 컨테이너라고 할 수 있다. ( = 배열 )따라서, 데이터를 추가, 삭제, 조회 등 데이터를 다룰 때 많이 쓰이는 STL 중 하나이고알고리즘 문제해결에서도 많이 쓰인다. vector 사용법 1) 선언 필수선언 #include 먼저 vector를 쓰기 위해선 선언부터 하자. 2가지의 방법이 있다. 1. 사용할 데이터의 크기(갯수)를 아는 경우(정적) 기본적으로 vector 의 선언은 단순하다. vector a; ( a 는 vector의 이름) 예) ..
[백준 2490] 윷놀이 문제 출처 : https://www.acmicpc.net/problem/2490 문제 요약 윷을 던진다.한 개의 윷은 배(0), 등(1) 으로 표현된다. 즉, 4개의 값이 주어진다.(예. 0 0 1 1 : 개)값이 주어졌을 경우 도, 개, 걸, 윷, 모 중 답을 고르시오.문제 풀이 0의 갯수를 구한다. 그래서 0의 갯수 답 0 모 1 도 2 개 3 걸 4 윷 #include#includeusing namespace std; int main() {for (int i = 0; i > a;if (a == 0) {cnt++;}}if (cnt == 0) {cout
[백준 2167] 2차원 배열의 합 문제 출처 : https://www.acmicpc.net/problem/2167 문제 요약 정보가 담긴 2차원 배열이 주어진다.2차원 배열 내에 주어진 구간의 합을 구하는 문제이다. 문제 풀이 이 문제는 동적 계획법을 사용하여 부분(구간)합을 구하는 문제이다. 여기서 부분합이란 ?? 배열 정보 4 5 1 2 3 4 부분합 배열4 9 10 12 15 19 이와 같이 자신의 위치를 포함하여 이전의 값들의 합(누적합)을 배열에 저장해두는 것이다. 이 원리를 확장하여 2차원 배열에 적용을 한 것이 이 문제의 핵심이다. (0, 0) (a, b) (n-1,m-1) 이와 같은 2차원 배열의 정보를 Dp(i, j) : (0,0) 부터 (i, j) 까지의 합을 저장해두자. 하지만 좌측상단의 시작이 (0,0) 아니라면 ?..