반응형

전체 글 51

[메모리구조] 프로그램의 메모리구조, Text, Data, Heap, Stack

우리가 프로그램을 작성하여 실행시키면 OS에 의해 메모리 공간이 할당된다. 바로 RAM영역이다. 할당된 영역은 크게 3가지로 나뉜다. 아래 그림을 보자. Text 영역 : 문자열상수등이 저장된다. Data 영역 : 전역변수, static 변수등이 Data영역에 저장된다. Heap 영역 : 동적할당메모리 영역이며 Stack보다 공간이 크다. Stack 영역 : 지역변수, 매개변수 등이 관리되는 영역으로 자동으로 관리된다. 한번 아래 코드를 보자. #include #include int A; static int B; char str[] = "MemoryAreaTest"; int main() { int N=4; static int C; int arr[N]; char str2[] = "MemoryAreaTest..

SW/C 2021.09.03

[VLA] Variable-length Array, 가변 길이 배열

VLA는 가변 길이 배열이다. 즉, 변수로 런타임중에 배열의 길이를 정할 수 있다는 말이다. 그 말은 즉, 사용자에게 Input을 받고 그 변수로 배열을 지정할 수도 있다는 말이다. 통상 우리가 알고 있는 배열은 상수로 길이가 지정되어 있고 컴파일중에 메모리 stack 영역에 할당이 된다고 알고 있다. int arr[5]; //상수로 지정한 배열arr int i; scanf("%d", &i); int arr2[i]; //VLA C99부터 지원되는 VLA는 위의 코드처럼 사용자로부터 input받은 변수로도 배열을 지정할 수 있다. 기존에는 이러한 것이 불가하여 malloc, calloc과 같은 동적메모리 할당을 사용했는데 그럴 필요가 없다니... 너무 좋지 않은가? 그러나 꼭 그렇지만은 않다. VLA의 특..

SW/C 2021.09.03

[동적메모리할당] malloc, calloc 사용법

malloc, calloc은 메모리 동적할당에 쓰인다. 아래를 보자. int N=4; int arr[N]; //int arr[4]; 위의 코드는 실행 가능할까? C언어 컴파일러의 버전에 따라 실행 가능 할 수도 있고 가능하지 않을 수도 있다. VLA를 지원하는지 하지 않는지에 따라 다르다. C99버전에서는 VLA를 지원하나 구버전에서는 기대할 수 없다. 구버전을 예로 든다면 아쉽게도 에러가 난다. 배열은 변수로서 선언할 수 없기 때문이다. 왜 안되는 걸까? 메모리 구조를 먼저 알아야한다. N이 지역변수임을 가정하면 N에 대한 메모리크기는 컴파일타임에 정해진다. 4byte일 것이다. 그러나 N의 값이 4라고 인식되는 것은 컴파일타임이 아닌 런타임이다. 따라서 프로그램이 수행되어야 한다는 뜻이다. 마찬가지로..

SW/C 2021.09.02

DFS, 순열구하기, 조합구하기

순열은 조합과는 다르다. 순열은 순서가 중요시 되는 수열이다. 예를들어 5개의 숫자 중 3개를 순서에 상관없이 고르는 것은 조합이다. 즉, 조합에서 (1,2,3)과 (3,2,1)는 같은 경우로 판단된다. 그러나 순열은 다르다. 순서가 중요하기 때문에 순열에서 (1,2,3)과 (3,2,1)은 다르다. 중고등학교에서 배웠던 공식이 기억날 것이다. 사실 기억나지 않는다. 0!은 1이다. 기억을 더듬어 5개의 숫자중에 3가지를 뽑아내는 조합의 경우의 수는 10이며, 순열은 60가지가 되겠다. 이를 코드로 어떻게 구현할 수 있을까? 순열 보통의 경우 DFS 알고리즘으로 순열을 구현할 수 있다. 5가지의 수 중에 3가지를 뽑아내는 순열의 경우는 아래와 같다. void Dfs_permutation(int level)..

SW/Algorithm 2021.09.01

아이템먹기, 원형 큐 사용하기 훈련

문제 아이템을 먹어주는 프로그램을 만들려고 한다. 단, 아이템을 먹는 규칙이 있다. 바닥에 떨어져 있는 아이템을 1번 부터 N번까지 있을때, S번의 아이템부터 시작하여 M번째 아이템을 먹는다. 그 후 다음 번호의 아이템부터 셈하여 M번째 아이템을 먹게 된다. 아이템을 먹게되는 순서를 구하라. 예를들어 아래와 같다고 하자. S가 1이고 M이 4이므로 가장 먼저 먹을 수 있는 아이템은 4이다. 이후 4 다음인 5부터 M번째 아이템은 1이므로 두번째 먹을 수 있는 아이템은 1이다. 다음으로 먹게 될 아이템은 1이다. 이와 같은 순서로 다음은 6, 5, 7, 3, 2의 순서로 아이템을 먹게 된다. 입력 N개의 아이템이 입력되며 N은 1부터 10000개이다. 시작하는 아이템 번호가 S로 입력되며 S는 1부터 N까..

SW/Algorithm 2021.08.31

[영종도맛집] 화장실 빼면 갓벽한 영종도 불티나조개구이

영종도는 서울과 매우 근교라 많이들 찾는 곳이다. 인천대교의 멋진 풍경도 한 몫한다. 영종도에서 매우 오랜만에 조개구이를 먹게 됐다. 그분께서 또 조개구이를 매우 좋아하시는 터라 나도 좋아하기로 했다. 영종도에는 참 많은 조개구이 집이 있는데, 나혼자산다에 나왔던 조개구이 집 부터, 여러 방송등에 나온 집들이 많다. 그 중에 불티나 조개구이가 가장 나아보였다. 포장마차 감성에 바다 앞이어서 일몰을 보며 먹을 수 있을 것 같기 때문이었다. 불티나 조개구이를 알아보자 1. 위치 불티나 조개구이는 영종도 용유동에 위치한다. 근처에 이렇다할 랜드마크가 없어서 딱히 설명할 수 없지만 어차피 차없이 가기 어려운 곳에 위치해 있기때문에 네비게이션에 치고 가면 되겠다. 길은 따라가는 것은 그리 어렵지 않은데, 재미있게..

일상/맛집 2021.08.31

거베라 꽃말, 생화를 2주 동안 즐기는 법

신비로움 거베라는 국화의 일종으로 색깔도 꽤나 다양하다. 꽃이 굉장히 크고 화려하다. 경험상 수분이 굉장히 많은 것 같다. 꽃말은 '신비로움'이다. 우리의 만남이 신비롭다는 뜻을 담아 전했다. 나름 장식있게 꾸몄는데 마음에 들었는지 모르겠다. 큰 꽃과는 다르게 줄기가 유독 연질이다. 관리를 잘해줘야하는 꽃 중 하나로 여겨진다. 필자는 2주채 안되는 시간동안 볼 수 있었는데 거베라가 마르게 되면 1/2 크기 정도로 작아진다. 말라가는 모습도 꽃말처럼 신비롭다. 거베라 거베라를 지켜보며 기이한 현상을 발견했다. 거베라는 줄기의 단단함보다 꽃이 많이 무거웠다. 그래서 물을 잘 먹지 못하면 꽃이 바로 병든 닭모가지 마냥 축 처진다. 이를 '물내림'이라고 한다. 물내림은 꽃이 물을 잘 먹지 못해 꽃과 줄기가 시들..

일상/꽃 2021.08.27

[영등포맛집] 찐맛집이다. 영등포 양꼬치 아반티신강

홍익인간같은 맛 필자의 두번째 맛집 기록이다. 사실 첫번째는 점수가 그닥 좋지 못했다. 그러나 이번엔 다르다. 홍익인간의 맛이다. 맛이 이로와서 널리 알리고 싶다. 그 분과 양꼬치를 처음 먹어서 감동이 두배이기도 했으나 기본적으로 맛이 아주 훌륭한 곳이었다. 사실 사장님에게는 매우 죄송하지만 처음에 도착했는데 사람이 아무도 없어서 혹시 잘못 된 것일까 싶어서 옆에 있는 다른 맛집이라고 알려진 태인양꼬치를 갔다. 그곳은 우선 자리가 매우 비좁았고 결정적으로 사장님이 매우 불친절했다. 뭔가 친절하는 척하는 불친절함이랄까. 먹으려면 먹고 말려면 마라 우리는 맛집이다 마인드. 친절도 맛의 일부이다. 그런 곳에서는 먹고싶지 않다. 당혹감을 감추지 못한 그 분과 필자는 자리에는 앉았으나 이내 다시 일어났다. 양꼬치..

일상/맛집 2021.08.25

[이진탐색] Binary Search, lower-bound, upper-bound

우리가 알고리즘을 할때 가장 단순하고도 쉽게 생각할 수 있는 것이 일일이 대조하면 찾는 순차탐색일 것이다. 순차탐색은 for으로 보통 구현되며 경우의 수 N과 M개의 경우에 시간복잡도 O(N*M)을 가진다. 즉, case가 적은 경우 문제될 것이 없으나 N과 M이 10000, 100000을 넘어갈 경우 부하가 심해진다. 때문에 우리는 이진탐색을 알아야한다. 시간복잡도가 logN으로 줄기 때문이다. 순차탐색은 보통의 경우 이진탐색으로 표현될 수 있다. 이진탐색의 기본 개념은 '분할정복'이다. Divide & Conquer. 이진탐색은 3개의 parameter가 필요하다. 탐색하려는 start point, end point, 그리고 찾으려는 target. 이진탐색은 기본적으로 오름차순으로 정렬이 되어 있어야..

SW/Algorithm 2021.08.24

[문래동맛집] 맛집이기엔 다소 아쉬운, 로라멘

난 먹는 것을 좋아한다. 그렇다고 뚱뚱하거나 보기 흉하지는 않다. 또한 식탐이 많지도 않다. 다만 한끼를 먹을때 맛있는 걸 먹고싶다. 정말 맛있는 걸. 함께 하는 사랑하는 사람에게도 맛있는 음식을 먹이고 싶다. 그럼 기분이 좋아지고 함께하는 시간이 기쁘며 하루가 완벽해진다. 그것은 곧 좋은 추억이 될테니까. 그러나 정보는 너무나 많고 맛집이 정말 맛집인지 모르겠고 그 글을 다 읽기도 너무 힘들다. 그래서 내가 먹어본 맛집을 기록해 가려한다. 1. 위치 로라멘은 문래동 창작촌에 위치해있다. 문래동에 맛집이 많아진 것 같다. 특유의 갬성적인 인테리어가 많다. 그러나 인테리어가 좋다고 맛이 좋은 것은 아니다. 창작촌 초입이라 찾는데 그렇게 어렵진 않을 것이다. 로라멘 : 서울 영등포구 도림로131길 17 2...

일상/맛집 2021.08.24

면접은 대화하는 것 아닐까, LG CNS 1차 면접후기

마곡사이언스파크 LG 그룹은 마곡사이언스파크에 그룹계열사를 모아놓았다. 굉장히 큰 규모이다. 면접날이 생각난다. E동의 건물에서 무슨 강당에서 대기했었다. 멀끔하게 양복을 차려입고 준비한 답변들을 손에 쥐고 긴장했지만 긴장하지 않은 척 대기하고 있었다. 난 대기를 굉장히 길게 했다. 대기장의 분위기는 나름 딱딱하지 않았던 것 같다. 기억에 다과들도 준비되어 있었는데 긴장된 탓인지 역시 먹지 않았다. 이윽고 내 이름이 불렸다. 실무면접 1차면접은 실무진분 2분과, HR 1분으로 구성되어 보이는 면접관께서 계셨다. 지원자는 3명씩 들어가서 다대다 면접이었다. 매우 편안한 분위기였으며 굉장히 자기소개서 기반의 질문을 많이 주셨다. 면접은 사실 사람과의 대화이기 때문에 표정, 목소리, 분위기, 발언, 청취 모든..

면접기록 2021.08.24

[이진탐색] 작품상 투표

문제 영화제에서 작품상을 투표한다. 후보작품은 N개이며 투표 참여 인원은 M명이다. 투표 용지에 1~10점의 점수가 써있고 작품이름이 써있다. 그런데 잘못 기입된 작품 이름이 있어 해당 표는 무효표 처리한다고 한다. 작품상 투표가 완료되었을때, 상위 3등을 구하라. 단, 동점일시 후보번호가 빠른 순서가 상위로 한다. 입력 N은 5부터 10000이다. 작품이름은 20자 이하 알파벳이며 M은 5부터 100000이다. 5 ABC Apple Banana Melon Skycastle 6 Banana 3 Melon 3 Apple 1 ABC 1 SKcastle 10 ABC 1 출력 Banana 3 Melon 3 ABC 2 문제해결 후보자별 이름과 투표용지의 이름을 1:1로 대조하여 모든 비교를 한다. 그럼 시간복잡도..

SW/Algorithm 2021.08.23
반응형