동적 할당을 할 때, 자주 쓰는 함수 중 하나는 malloc입니다. 오늘은 이 함수에 대해서 간단하게 알아보고, 1차원, 2차원 배열을 어떻게 동적 할당하는지 배워보도록 하겠습니다. 할당할 size를 인자로 받고, void형 포인터를 리턴하는데요. malloc가 리턴한 결과값에 적절하게 형변환을 해야 한다는 것을 의미해요. 이것만 보시면, 무슨 이야기인지 잘 모르실 듯 싶어서, 1차원 배열을 dynamic allocate 하는 걸 예로 들어보도록 하겠습니다. 먼저 아래 프로그램을 보겠습니다. 되게 어려운 것 같지만, 사실 5번째 줄이 핵심입니다. 저는 sizeof(int)에 5를 곱한 것 만큼 공간을 할당했는데요. 이는 5개짜리 int형 자료를 저장할 수 있는 space를 할당했다는 의미입니다. 그러면 ..
전체 글 검색 결과
좌표 압축이라는 기술이 있다고 들었습니다. 물론, 저는 ps를 하지 않아서 잘 모르겠습니다. 좌표 압축을 위해서, 중복을 제거해야 하는데요. 그 때 많이 쓰는 함수가 sort + unique + erase 조합입니다. 아마도 그러리라 생각이 듭니다. 물론 set, map도 됩니다만. 이것은 제 전문이 아니니 논외로 하겠습니다. 이 중, unique가 어떻게 동작하는지 이해해 보도록 하겠습니다. cpp reference 코드에 나온 코드는 아래와 같습니다. 아. 보기만 해도 힘드네요. 일단, result, first, last 세 개가 있습니다. 이 셋을 기준으로 보도록 하겠습니다. 보통 unique를 쓰실 때, unique(v.begin(),v.end()) 이런 식으로 쓰실 거니, last는 자료구조의 ..
자료구조는 어떻게 공부해야 하는가? 사실 명확하게 답을 드리지는 못하겠습니다. 문제 상황이 다르게 바뀌었을 때, 어떤 구조로 어떻게 optimize를 시켜야 하는지 생각해 보면, 생각보다 도움이 많이 될 듯 싶어요. 프로그래머스에는 '큰 수 만들기' 라는 문제가 있는데요. 이것을 어떻게 해결해야 하는지. 그리고 들어올 수 있는 문자 집합이 커지면 또 어떻게 해결해야 하는지 천천히 보도록 하겠습니다. 문제는 아래와 같습니다. 단, 남은 수들의 순서는 바뀌면 안 됩니다. 이 문제의 조건만 조금 바꿔서, 소문자로만 이루어진 길이 ? 이하의 문자열에서 ?개를 지워서, 사전순으로 가장 앞선 것을 만들라는 문제가 코테에 출제 되었습니다. 문자 집합만 다를 뿐이지, 풀이 자체는 동일하다는 거 보이시나요? k개를 일일..
식사하는 철학자 문제는 deadlock을 단적으로 보여주는 문제 중 하나입니다. 젓가락이 5개가 있고, 식사를 하기 위해서, 철학자는 자신의 왼쪽, 오른쪽에 있는 젓가락을 들어야 한다고 해 봅시다. 그런데, 사람들이 자기 왼쪽에 있는 젓가락을 든 상태에서, 오른쪽에 있는 젓가락을 얻으려고 한다면 어떨까요? 그리고, 누군가 젓가락을 뺏을 수 없다면? 이럴 때, deadlock이 발생하게 됩니다. 그러면 이 문제를 풀기 위해서 어떻게 해야 하는지 봅시다. 먼저, flag가 있습니다. 이것은 젓가락이 누군가에 의해 집어진 상태인지를 나타냅니다. 5명이 있으니 int형 5개를 저장하는 array를 선언하였습니다. 그리고 people은 현재 식사를 하고 있는 철학자의 수를 의미하는데요. 왜 이 변수를 썼는지 밑에..
최근댓글