> sqlplus / as sysdba


> alert user scott

identified by oracle

account unlock;


> connect

scott/oracle


> select tname from tab;





- 실습문제배포용의 데이터파일 , 템프파일 경로 바꾸기


> conn / as sysdba



 - 내용 복사해서 붙여넣기 (콘솔)


> conn EXPERT/EXPERT


연결되었습니다


> @D:\oracle\script들\tuning_basic.sql





> conn / as sysdba

> show parameter db_keep_cache_size  

> show parameter db_keep_cache_size

> show parameter db_keep_cache_size


(킵,리사이클 디폴트 캐시 사이즈 확인)

기본은 하한 설정이 되어있지 않아 0으로 되어 있을것











실행계획




>grant select on v_$sql to scott;

>grant select on v_$session to scott;

>grant select on v_$sql_plan_statistics_all to scott;

권한 부여


>conn scott/oracle


>alter session set statistics_level=all;







auto trace로 보는 방법


>conn / as sysdba

> @?







아... 음.. 일단 저번주보다 1키로가 줄었다.


이제 슬슬 운동을 시작할 떄가 온것 같다.



3주차 식단기록을 보니 난 전혀 반성하지 않은것 같다.. ;;;


3주차부터는 먹은 음식의 칼로리를 계산해서 같이 기록하는 것을 시작했는데 효과가 좋은 것 같다.


비록 반성은 안했지만 표를 볼때마다 그만 먹어야겠다 라는 생각도 자주 하게 되고 일단 내가 얼마나 먹어야


적당히 배가 부른지 알 수 있게 되고 칼로리가 높은 음식은 피하게 되는 것 같다. 물론 칼로리를 확인하면서


지방, 단백질, 탄수화물 함량도 체크하게 되는 습관이 들게 된것도 좋은 점이다.




1. 일주일동안 먹은 식단



이번주도 반성하자..


하하하하 토요일 저 정신나간 칼로리...;;;


핑계를 대자면...


쿠팡 개발자 테스트를 토요일에 보고 해방감에 쳐묵쳐묵이긴 하지만..


그리고 충격적인건 소주 3병 칼로리가 어마어마하게 높다


소주 한병에 350칼로리 라고 하는 곳도 있고 한잔(45ml)에 60칼로리 정도라고 하는 곳도 있어서


가장 높은 최대치로 계산을 했다.


350으로 계산해도 3병이면 1050칼로리다. 요즘 내가 운동을 안하고도 살이 빠지고 있는게 납득이 된다.


식품의 칼로리 정보는 주로 http://www.fatsecret.kr/ 이곳에서 참고를 많이 하고 있다. 다양한 제품군과


제조사별 칼로리 정보가 나와있어서 찾기가 좋다. 


저렇게 칼로리를 기록할때 몇가지 팁이 있다면


1. 포장된 음식을 먹기전엔 항상 칼로리 확인을 하는 습관을 들인다.


2. 먹은 음식 봉지를 막 버리지 않는다.(나중에 다시 찾아봐야할 떄가 있어서)


3. 정량표기된 식품을 먹는다.


이 세가지정도를 지키면 칼로리 기록이 그렇게 어렵진 않은것 같다.



아직 일주일에 한끼만 먹고싶은걸 먹고 나머지 식사는 절제해야한다는 규칙을 지키지 못하고 있다.


이번주에 들어서 확실히 느낀건 평일엔 저녁을 적게 먹어도 버틸만 한데 월요일이 항상 힘들어서 과식을 하게 된 원인은


금,토,일 3일간 평소보다 많이 먹어서 위가 늘어나 더 허기를 잘 느끼는게 아닐까 싶다. 4주차땐 일요일 저녁은 소식하고


월요일 상태가 어떤지 체크 해봐야겠다.



지금 하고있는게 요즘 유행하는 저탄고지는 아니지만 확실히 살찌게 만드는 주범은 탄수화물이기 떄문에 최대한 피하려고


신경을 쓰고 있긴 하다. 




2. 운동


이제 운동을 시작할때가 온것 같다. 92kg부터 시작하려고 했지만 그러다간 너무 미뤄질 것 같고


하루에 10분씩이라도 조금씩 운동하는 습관을 들이기 시작해야 나중에 강도를 올리거나 본격적으로 운동할때


무리가 없을 것 같다는게 내 생각이다.


얼마전 그냥 누워서 다리들기 몇번했다고 허벅지에 알배긴걸 보고 내몸은 충분히 쓰레기같은 상태라는걸 인지해서 인지


운동에 대한 부담감이 생겼다.




3. 생각


먹는거 조금만 더 줄이고 과식하더라도 조금만 더 억제하자.  표를 보면 7일중에 4일은 칼로리가 엄청 높고


 3일만 저칼로리 인데 조금만 더 노력하면 완전히 바뀔 수 있을 것 같다.


그래도 매일저녁 라면먹던 습관이 바뀐것 같아 기쁘다. 


마음 급하게 먹지 말고 일주일에 1키로 씩이라도 빠지고 있으니까 포기하지 말고 계속 스스로 다짐해야 한다.



















트리의 모든 노드를 한번씩 방문하여 모든 정보에 대한 선형 순서를 만들어 내는 방법을 알아보자


트리, 이진트리에 대해서는 이전글을 참고자도록 하자.

2016/10/18 - [Yame Programmer/자료구조&알고리즘] - 야매 개발자 자료구조 가이드[트리(tree)]


이진트리나 이진트리의 순회방법을 난 이제 알았는데 컴공 학생들은 2학년때 배운단다... 부럽...



순회방법에는 3가지가 있다.


1. 전위 순회(Preorder Traversal)

2. 중위 순회(Inorder Traversal)

3. 후위 순회(Postorder Traversal)



1. 전위 순회(Preorder Traversal)

<전위 순회의 탐색 순서 : A B D E C F G>


전위 순회의 특징은 루트 노드를 가장 먼저 탐색 한다.

루트 노드 부터 시작해 왼쪽 하위트리를 탐색하고 왼쪽 트리의 탐색이 끝나면 오른쪽 하위 트리를 탐색하는 방식 입니다.



2. 중위 순회(Inorder Traversal)

<중위 순회 탐색 순서 : D B E A F C G>


중위 순회의 특징은 루트노드가 탐색 순서의 중앙에 위치 합니다.

왼쪽 하위트리 부터 시작해 루트를 거쳐 오른쪽 하위 트리를 탐색 합니다. 



3. 후위 순회(Postorder Traversal)

<후위 순회 탐색 순서 : D E B F G C A>


후위순위의 특징은 루트가 가장 마지막에 탐색 됩니다.

왼쪽 하위 트리에서 시작해 오른쪽 하위트리를 탐색하고 루트 노드를 탐색합니다.



구현된 코드를 참조하실분은


http://songeunjung92.tistory.com/29

http://marobiana.tistory.com/83


이분들의 포스팅을 참고하지면 좋을 것 같습니다.



트리(Tree)라는 자료 구조에 대해서 알아보자.

트리는 말그대로 나무와 유사한 자료 구조이다. 


뿌리에서 시작해 가지가 뻗어나가고 뻗어나간 가지에서


다시 잎사귀가 생긴것과 유사한 모양을 가지고 있는데 그 나무를 뒤집어 놓은것과 같다.


아래 그림을 보도록 하자


<트리는 위와 같은 구조를 가지고 있다.>



부모자식관계 : B의 부모는 A , B의 자식은 D,E 

루트 : 트리구조에서 가장 위에 있는 노드, 부모가 없다.

노드 : 트리를 이루는 한 요소 (ex 위 그림의 A, B, C , D ....)

차수 : 어떤 노드가 가지고 있는 자식의 노드 개수를 말한다. 예를 들어 B노드의 차수는 2이다.

        (트리의 차수를 말할땐 가장 높은 차수를 말한다. 예를들어

         D노드에 자식이 하나 더 생긴다면 위 트리의 차수는 3이다)

레벨 : 트리를 이루는 각 층의 번호이다. 깊이 내려갈 수록 레벨이 높아진다. 

높이,깊이 : 루트 노드부터 가장 끝에 있는 노드 까지의 깊이(경로의 길이) 

               위 트리의 깊이는 3이다.




Left chaild-right Sibling 표현법


트리의 표현법이다. 아래의 그림처럼 한개의 노드에 자식과 형제의 포인터를 지니는 구조이다.




Child : 자식노드를 가르킨다

Sibling : 형제노드를 가르킨다


가장 위에 있는 노드부터 시작해 왼쪽에 있는 자식노드를 구하고 그 노드의 자식노드와 형제 노드를 구한다

이렇게 반복을 하면 모든 자식 노드를 찾을 수 있게 된다.





이진 트리 (Binary Tree)


최대 2개의 자식 노드를 가질 수 있는 트리이다.

한 노드당 자식을 1개만 가질 수도 있고 아무것도 없을수도 있고 2개를 가질수도 있다.

이진트리의 종류에는


완전 이진 트리(Complete Binary Tree)와 사향 이진 트리(Skewed Binary Tree), 포화 이진 트리(Full Binary Tree)가 있다.



<완전 이진트리(Complete Binary Tree)>


완전 이진트리는 어떤 노드 두개의 레벨차가 1이하 이며 왼쪽부터 오른쪽으로 채워지는 트리 이다.

만약 왼쪽에서 오른쪽으로 가다가 중간에 노드가 비어있다면 그건 완전 이진트리가 아니다.

예를들어 위의 그림에서 E노드 아래에 자식노드가 생성되면 완전 이진트리가 아니게 된다.




<사향 이진트리(Skewed Binary Tree)>


사향 이진트리는 루트노드를 제외한 모든 노드가 부모 노드의 왼쪽 자식 노드이거나 반대로 오른쪽 자식 노드인 것을 말한다. 즉 노드의 방향이 한쪽 방향으로만 치우쳐진 트리이며 다른말로 경사,편향 이진트리 라고 불리기도 한다.




<포화 이진트리(Full Binary Tree)>


포화 이진트리는 완전이진트리와는 다르게 최대한 노드가 가득차 있는 트리를 말한다. 가장 마지막 노드를 제외한 모든 노드가 자식노드를 2개씩 가지고 있다. 

(모든 포화 이진트리는 완전 이진트리 라고 부를수 있지만 그 반대는 성립하지 않는다.). 



이러한 뭔가 당연한것 같은(따로 공부하지 않아도 될것 같은) 트리구조를 왜 알아야 하는지 얼마 전까진 사실 잘 몰랐다. 

그러나 후에 포스팅할 트리의 순회구조와 그 다음 위상정렬(DFS 깊이 우선 탐색), 너비 우선탐색(BFS)를 거쳐

다익스트라 알고리즘과 같은 조금더 난이도 있는 알고리즘을 이해하기 위해선 이 트리구조에 대해서

기본적인 이해가 필요하기 떄문이라는걸 근 일주일간의 삽질 끝에 체감했다.


역시 기초가 중요하다.



참조: http://blog.eairship.kr/215


순차탐색은 쉬웠으니 빠르게 다음 공부할 이진탐색(Binary Search)에 대해서 알아보자.


이진탐색은 한번 비교를 할때마다 비교를 하는 범위가 반으로 줄어든다


이게 순차탐색과 비교해서 알마나 큰 차이가 있냐면


만약 70억개의 데이터를 검색했을때 순차탐색은 최대 70억 번 평균 35억 번을 비교 하는데 


이진탐색은 최대 33번의 비교로 탐색을 완료 할 수가 있다.


대신 조건이 하나 있는데 이진탐색에 사용하는 배열을 정렬되어진 배열이어야 한다는 것이다.



그림으로 알아보도록 하자




먼저 배열의 중앙을 선택하고 찾고자 하는 값보다 큰지 작은지 비교를 합니다.



5는 7보다 작기 때문에 5에서 오른쪽에 있는 요소들로 이동하여 


다시 그중 중앙에 위치한 값을 선택해 비교 합니다.



8은 7보다 크기 때문에 왼쪽으로 이동을 합니다


이런식으로 범위를 좁혀나가다 보면 원하는 값을 찾게 되겠죠



한번 검색을 수행할떄마다 범위가 반으로 줄어든다는 말이 이해가 되지 않는다면 


노트에 펼쳐놓고 위의 그림을 따라서 그리고 검색하지 않는 범위부터 반으로 접어 보면 이해가 갈 것이다.



이진탐색의 시간 복잡도 : O(log n) 



이진탐색의 구현 소스를 보면 생각보다 간단하다. 위에 그림에 있는 if문을 반복할 뿐이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int BinarySearch(int dataArr[], int size, int findData)
{
    int low = 0, high = size - 1, mid;
        // low = 검색 할 범위의 가장 왼쪽
        // high = 검색할 범위의 가장 오른쪽 
 
    // high가 low보다 작아진다면 찾으려는 데이터가 데이터 집합에 없다.
    while (low <= high)
    {
        // 중앙값은 low와 high를 더한 값을 2로 나누면 된다.
        mid = (low + high) / 2;
        // 만약 찾으려는 값이 중앙값보다 작다면 high를 mid - 1로 둔다.
        // 찾는값이 중앙값보다 작기 때문이다.
        // 이때 mid-1 = 다음검색할 범위의 가장 오른쪽이 된다.
        if (dataArr[mid] > findData) high = mid - 1;
        // 만약 찾으려는 값이 중앙값보다 크다면 low를 mid + 1로 둔다.
        // 찾는값이 중앙값보다 크기 때문이다
        // 이때 mid+1 = 다음 검색할 범위의 가장 왼쪽이 된다.
        else if (dataArr[mid] < findData) low = mid + 1;
        // 중앙값과 찾으려는 값이 일치하면 mid를 반환한다.
        else return mid;
    }
    // 데이터를 찾지 못하면 -1를 반환한다.
    return -1;
}
 
int main()
{
    int dataArr[] = {123456789101112131415172124262728};
    int length = sizeof dataArr / sizeof dataArr[0];
    int input, ret;
 
        scanf("%d"&input);
        ret = BinarySearch(dataArr, length, input); // 이진탐색 실행
        if (ret != -1) printf("찾으려는 데이터는 %d번째에 있습니다.\n", ret + 1);
        else printf("데이터를 찾을 수 없습니다.\n");
    
    return 0;
}
cs


(참조 http://blog.eairship.kr/246)


주석이 많아서 좀 복잡해 보이는데 주석도 빼버리면 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int BinarySearch(int dataArr[], int size, int findData)
{
    int low = 0, high = size - 1, mid;
 
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (dataArr[mid] > findData) high = mid - 1;
        else if (dataArr[mid] < findData) low = mid + 1;
        else return mid;
    }
    return -1;
}
 
int main()
{
    int dataArr[] = {123456789101112131415172124262728};
    int length = sizeof dataArr / sizeof dataArr[0];
    int input, ret;
 
    scanf("%d"&input);
    ret = BinarySearch(dataArr, length, input); // 이진탐색 실행
 
    if (ret != -1)
        printf("찾으려는 데이터는 %d번째에 있습니다.\n", ret + 1);
    else 
        printf("데이터를 찾을 수 없습니다.\n");
    
    return 0;
}
cs


이런 소스가 된다.


생각보다 간단한 코드다.

순차탐색이 뭐지? 하고 검색해 들어 온 사람들 대부분은 해당 내용을 보면 매우 실망할 것이다.


왜냐하면 이미 반복문을 배우면서 적어도 한번 이상은 써봤을 탐색 방법이기 때문이다.


2년동안 이 방식으로 검색을 하면서 이 알고리즘의 이름이 순차탐색 이라는 것을 난 오늘 알았다.



매우 단순하다



시간 복잡도:  최악O(n) , 평균 (n+1)/2


시간복잡도가 최악인 경우는 원하는 값이 가장 마지막에 있을 경우이다.



데이터가 배열에 있으면 배열의 처음부터 끝까지 차례대로 비교하면서 원하는 


데이터를 찾는 알고리즘이다.


이 알고리즘은 단방향으로 탐색을 하기 때문에 선형탐색(Linear Search)라고 부르기도 한다.



코드는 매우 단순하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
// for문을 돌면서 데이터를 찾는다. 찾느 데이터가 없는 경우 -1 반환
// 찾는 데이터가 있으면 해당 번째 반환
int search(int dataArr[], int lengthint findData)
{
    for(int i = 0; i < length; i++)
        if (dataArr[i] == findData) return i;
    return -1;
}
 
 
 
int main()
{
    int arr[] = {232514566721322451};
    int length = sizeof arr / sizeof arr[0];
    int findData = 0;
    int findIndex = 0;
 
    printf("찾으시는 데이터를 입력해주세요: ");
    scanf("%d"&findData);
 
    findIndex = search(arr, length, findData); // 
 
    if(findIndex == -1) printf("데이터를 찾지 못했습니다.\n");
    else printf("데이터는 %d번째에 있습니다.\n", findIndex);
    
 
    return 0;
}
cs



(참조 http://blog.eairship.kr/245 )




순차탐색은 코드구현이 매우 쉬워서 짧은 기리의 데이터를 검색할때 사용하는 것이 좋은 것 같다.


후.. 반성하자...




주말동안 먹고싶은거 다먹고 야식까지 먹고 아침에 잰 몸무게. 물론 저번주보단 빠졌다


저번주도 주말동안 폭식후 아침에 일어나자 마자 쟀었던건데 비교해보면 0.9kg이 줄어들었다.


회사갔다 퇴근하고 저녁에 재보니 96.6이 나온다.


더 충격적인건 갑자기 떡볶이가 너무 먹고싶어서 떡볶이를 그 작은 냄비에 한가득 해먹고


물도 잔뜩마시고 몸무게를 재보니 98.1이 나왔다


저녁 한끼+물 = 1.5kg .. 


반성하자


이건 진짜 반성해야겠다. 사실 먹기전과 좀많이 먹은후 바로 몸무게를 재서 비교해본적이 없었는데


좀 충격받았다.. 96.6이 98.1이 되는 마술같은 상황이라니;;


 

또 충격받은건 내가 머리를 자르러 가는 미용실의 헤어디자이너분(남자) 이 계시는데 두달만에 11키로 감량을 하셨다고 한다.


와.. 본받자


8주동안 술은 입에도 안대고 PT 트레이너가 짜준 식단표대로만 먹고 40분 무산소 40분 유산소 운동을 꾸준이 하셨단다


사람이 비율이 달라보이더라.


2주차는 참 반성할거리가 많다.. 




1. 일주일동안 먹은 식단


요일날짜아침점심저녁간식(야식)


월요일2016.10.10작은고구마 5개
+ 미역 초무침
소고기 보신탕
+ 밥 1/2
작은고구마 5개
+두부 반모
+미역 초무침
화요일2016.10.11작은고구마 5개
+ 두부 반모
+ 미역 초무침
제육볶음
+밥1/2
불고기 1인분
+당면 1인분
+작은고구마 2개
+라면1개
+ 소주 반병
수요일2016.10.12작은고구마 5개
+미역 초무침
제육볶음
+밥1/2
김치라면1개
+두부 반모
+꽁치 1캔
+미역 초무침
목요일2016.10.13굶음제육볶음
+밥1/2
만두국(교자만두 10개)
+두부 반모
금요일2016.10.14작은고구마 5개
+ 미역 초무침
제육볶음
+밥1/2
전어회(5마리)
+소세지 2개
+소주 2병
토요일2016.10.15만두국(만두 10개)
+ 작은 고구마 3개
만두국(만두 10개)
+라면사리
만두국(만두 10개)
+라면사리
일요일2016.10.16굶음피자 1판
(피자스쿨 콤비네이션)
족발
+ 맥주 1000ml
라면

반성하자...  


점심밥은 1/2로 줄이고 아침은 늦게 일어나서 못먹은거 빼곤 아침도 적당히 잘 챙겨먹었는데


저녁메뉴가.... 


아무리 지금은 과식하는 습관을 고치기만 한다고 생각하는 주라고 해도 내가 봐도 저건 아니다 싶다.


더 심각한건 주말이다. 난 주말엔 먹고싶은걸 마음껏 먹고 평일에 제한을 해야 겠다는 생각으로 시작을 했는데


위에서 언급된 헤어디자이너분은 일주일에 한끼만 먹고싶은걸 먹었다고 하셨다.


나는 금요일 밤부터 일요일 밤까지 주말내내 먹었다 ㅋㅋㅋㅋㅋ


그래도 확실히 평소에 먹던것보단 양이 줄고 술도 굉장히 많이 줄었다. 이건 칭찬하자...


점심밥도 탄수화물을 줄이기 위해 밥량은 꾸준히 줄이고 잇는 것도 칭찬하자 ㅎ


쌀밥이 살찌는데 정말 큰 영향을 끼치기 때문에 우선 밥량을 줄이는게 중요 하다.


tip) 군대에서 살뺄때 썻던 방법인데. 처음부터 밥을 조금먹긴 힘들다. 그렇기 때문에 처음엔 평소 먹는 만큼 밥을 먹되

1숟가락만 남긴다. 그리고 남기는 량을 점점 늘려간다. 특히 자율배식의 경우 밥을 많이 먹던 사람은 일단 많이 퍼놓고

밥을 먹고 싶어 하는데 그걸 줄이는게 아니라 남기는 양을 늘려가는 거다. 물론 버리는 밥이 아깝지만. 이 방법이 가장

좋았다.  그리고 남기는 밥량을 늘려가면서 허기를 채우기 위해 반찬류를 많이 먹었다. 물론 나트륨 폭탄의 위험이 있지만

그 시기는 잠깐이다. 고기반찬을 더먹고 탄수화물인 밥을 줄이는게 더 중요하다고 생각한다. 그리고 밥량이 1/2정도가 되었을때 사실 배가 안부른것은 아니다 이미 어느정도 배가 불러있다는걸 머리와 몸이 기억하도록 유지 하자. 그리고 그 이후부턴 반찬량을 줄이기 시작한다. 

 두번째로는 밥을 아주아주 천천히 먹는다. 빠르게 밥을 먹게 되면 것은 뇌가 배부르다고 느끼기도 전에

적정수준을 넘어서 계속 더 먹기 떄문에 과식을 하게 된다. 내가 사용했던 방법은 밥을 깨작깨작 먹는다. 수저든 젓가락이든 평소 입안에 넣는것의 절반으로 떠먹는다. 그리고 음식을 오래씹고 넘겨야지 라는 생각을 마음속으로 계속 되내인다.

개인적으로 효과가 가장 좋았다.



하루에 소주2병씩 먹던 습관을 고치게 된 가장 큰 이유는 게임이었다. 생각해보니 집에서 혼자 술을 마셨던건 심심하고 


외롭기 때문 이었던거 같다. 일단 게임을 하면 심심한건 사라지고 게임하느라 술먹을 시간이 없다.


술마시면 게임을 못하니까 자연스럽게 술을 안마시게 되었다. 이제 게임을 끊어야 한다 ㅋㅋㅋㅋㅋ




그리고 2주차부터 시작한건 구글 스프레드시트로 식단을 정리하기 시작했다는 것





이런식으로 구글 드라이브에서 따로 엑셀이 없어도 브라우저 자체에서 엑셀처럼 사용할 수 있는 기능이다


집에서 작성하지 않아도 회사에서 작성할 수도 있고 참 편리한 것 같다. 



3. 운동


여전히 아직 운동은 하지 않는다.


몸무게가 92kg이 되면 그때부터 시작할 생각이었는데 이번주말에 쿠팡 테스트가 끝나면 


그러니까 4주차 시작할때 부터 운동을 해야 할까 고민이 된다.




3. 생각


2주차는 반성할게 참 많다

1) 저녁 식단 먹는 양을 더 줄여야 한다. 

2) 이제 게임 끊자 2주동안 술 많이 줄였다.

3) 마음을 더 독하게 먹자. 특히 일요일 밤에 야식 조심하자

4) 운동할 마음가짐을 가져야 할 것 같다.

5) 먹고싶은건 일주일에 한끼! 만 먹는다.


주말에 먹은 피자가.... 알고보니 2조각에 444kcal 이란다...

한판이  6조각정도 되니... 1300kcal을 한끼에 먹은 것이다.


3주차부턴 먹은 음식의 칼로리를 대충이라도 계산해서 함께 기록해야 겠다.

그냥 단순 텍스트로만 보니 저녁을 제외하곤 많이 먹었다는 생각도 잘 안들게 되는 것 같다.

사실 3주차정도면 먹는것만 잘 조절 했어도 95kg까지는 빠졌어야 하는게 내 예상이었는데

아무리 몸무게 빼는 기간을 길게 잡았다고 해도 


나 스스로가 날 너무 과대평가한것 같다. 이런 의지박약아 같으니..


그래도 오늘 식후에 바로 몸무게를 재본것이 약간의 충격요법같은 효과가 생겨서 다시 마음을 잡는 계기가 된 것 같다.


정말 저녁 먹을때 잠깐만 마음 놓고 정신차려보면 이미 2인분을 먹어놓고 후회하고 있는 모습을 고쳐야 겠다.




얼마전 쿠팡에서 서류 합격 메일이 날아왔다. 구글링을 해보니 쿠팡같은 경우 서류는 거의다 통과시켜 놓고 


problem solving test를 통해서 엄청나게 걸러버리는 듯 하다.


개발자로 취직해서 일한지 2년이 가까워 지면서 웹쪽 HTML CSS JS는 많이 해봤지만


순수 자바 쪽은 거의 건들이지 않았다는 것에서 불안감이 엄청나게 느껴졌다.


학교에서 전공수업 잘 듣고 자료구조나 알고리즘 공부 열심히 했으면 붙을 수 있다고 하는데


난 전공자가 아니다;; 학교에서 기초적인걸 배우긴 했지만 자바 클래스 만들고 'Hello word' 띄우는 수준?


안드로이드로 인텐트 날려서 화면 전환하는 정도 까지만 배웠고 이론적인건 소프트웨어공학 원론쯤?


그 외엔 죄다 마케팅이나 경영, 혹은 발표과제로 점수먹는 수업이라든지 실음과 전공수업이나 들었지 ㅋ


말하자면 전공이라기 보단 반공(?)이라고 말하는게 어울릴 듯 하다.



아무튼 자료구조는 스택과 큐밖에 모르고 정렬 알고리즘은 버블정렬 밖에 모르는 상태에서


어렵다고 소문난 쿠팡 테스트를 통과하려면 짧은 시간동안 공부를 많이 해야 겠다 싶었다.


면접 후기라던지 자료구조 기초라던지 알고리즘을 어떻게 공부해야 하는지 찾아 보면서


퀵정렬이라는 것이 있다는걸 태어나서 어제 처음 알게 되었다.



버블정렬만 있으면 만사 오케이인줄 알았고 심지어 프로젝트중에선 DB에서 불러올때 ORDER BY만 떄려버리면 해결이니


정렬 알고리즘을 사용할 필요성도 못느끼고 있었는데....  좀 충격이었다.



심지어 아래 동영상을 보고 가장 먼저 들었던 생각은


"버블정렬 개쓰레기였네??"


일단 정렬의 종류는 여러가지 있는데 아래 영상을 보도록 하자. 가운데 표시된 퀵정렬이 대체로 가장 빠른 결과를 보여준다. <출처: Viktor Bohush, 유튜브>






그리고 퀵정렬에 대해서 좀더 큰화면으로 보자면 <출처: Timo Bingmann / 유튜브>




이렇게 보여질 수 있다.



해당 내용을 직접 포스팅 하려 해보았으나 알고리즘이나 기초지식이 1도 없는 상태에서 이해 할 수 있는 포스팅 만드는데


시간이 너무 오래 걸린다. 퀵정렬이 무엇인지 이곳 저곳 둘러보던중


아주아주아주 설명을 잘 해놓은 게시글을 발견했다.


허접하게 내가 만드는 것 보다는 정말 잘 만든 다른사람의 글을 보는 것이 더 나을 것이라고 판단 했다.



http://navercast.naver.com/contents.nhn?rid=2871&contents_id=90163


위 주소로 들어가보면 퀵정렬에 대해 아주 잘 설명해 놓은 글이 있다.


한번 쭉 읽어 보고 이해가 좀 되겠다 싶다면 슈도코드 부분은 스킵하고 다음 소스를 보도록 하자



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 값을 비교하고 로우와 하이를 이동시키면서 값의 교환이 이루어지는 함수
public static int partition(int arr[], int left, int right) {
 
    int pivot = arr[(left + right) / 2];
 
    while (left < right) {
        while ((arr[left] < pivot) && (left < right))
            left++;
        while ((arr[right] > pivot) && (left < right))
            right--;
 
        if (left < right) {
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
        }
    }
 
    return left;
}
 
 
public static void quickSort(int arr[], int left, int right) {
 
    if (left < right) {
        // 값을 비교하고 로우와 하이를 이동시키면서 값의 교환이 이루어지는 함수
        int pivotNewIndex = partition(arr, left, right);
        // quick sort의 설명중
        // 자주 나오는 '재귀', '분할' 이라고 설명되어지는 부분이다.
        quickSort(arr, left, pivotNewIndex - 1);
        quickSort(arr, pivotNewIndex + 1, right);
    }
 
}
 
// 
public static void main(String[] args) {
    int[] arrs = { 69103021683122 };
    quickSort(arrs, 0, arrs.length - 1);
    System.out.println("결과");
 
    for (int i : arrs) {
        System.out.print(i + " ");
    }
}
cs


<참조: http://creatordev.tistory.com/70>



처음 올린 링크의 글을 정독했다면 위 소스를 보면서 직접 소스를 디코딩 해보도록 하자.

소스의 처음부터 정렬이 종료될때까지 직접 소스를 따라가면서 정렬을 해보는 것이 이해하는데 가장 큰

도움이 될 것이다.



요즘 웹쪽엔 내가 아는 지식이 후달려서 더 포스팅하기 힘들었는데 노드js나 리엑트js 해보기 전까진


자료구조와 정렬에 대해서 포스팅을 해봐야 겠다. 나에게도 큰 도움이 되는듯 하다.



2016년 10월 10일 월요일 아침 공복상태에서의 몸무게 입니다.



1. 일주일간의 식단


-10월 4일 화

아침:굶음

점심:보쌈정식(배부름) 밥 반공기

저녁:라면+작은만두3개+작은고구마2개

운동: 안함


-10월 5일 수

아침: 샌드위치2개, 작은햄버거 1개, 커피우유 500ml

점심 : 제육볶음 (배부름) 밥 2/3공기

저녁 : 라면, 작은고구마4개, 스팸 130g

운동: 안함


-10월 6일 목

아침: 굶음

점심 : 부대찌개, 라면사리, 밥 2/3공기

저녁 : 작은고구마 5개, 작은만두 5개, 미역초무침


-10월 7일 금

아침: 샌드위치(365kcal), 초코우유(390kcal)

점심: 제육볶음+돈까스(반조각) + 밥2/3공기

저녁: 라면+작은고구마5개+캔참치 100g+ 작은만두5개 + 미역 초무침+소주1병 반


-10월 8일 토

아침 :라면+ 작은만두 4개+미역 초무침

점심~저녁 : 고기부페+동태탕+소주 3병


-10월 9일 일

아침: 잠

점심 : 진짬뽕+ 작은만두 4개 + 미역초무침

저녁: 불고기1인분+당면1인분+작은고구마 4개+ 미역초무침 + 소주 반병

야식: 만두국(교자만두 10개)+ 미역초무침


2. 운동


안함



3. 생각


100kg에서 1.2kg이 빠졌습니다. 사실 몸무게가 100kg정도 되면 1~2키로는 의미없는 숫자입니다 ㅋㅋㅋ


밥한번 먹고안먹고 화장실한번 갔다오고 안오고 정도의 차이니까요 


그래도 일단 100보단 작아졌으니 다행이지요.. 심지어 주말동안엔 엄청난 폭식을 했으니까 이정도 나왔으면 


선방했다고 봅니다.



이번주 식단의 포인트는 몇가지로 정해놨습니다.


1)출근전날 술안먹기

2)작은냄비에 음식 해먹기

3)아침 챙겨먹기

4)주말엔 먹고싶은거 먹고 술도 먹기


일반분들이 보시면 이게 무슨 살뺴겠다는 사람 식단이야? 라고 생각 하실수 있겠지만.


0주차에 적었듯이 전 저녁에 3~4인분을 먹습니다..


좀더 직관적으로 비교를 해보자면


이번 한주동안의 저녁은


제가 평소에 음식을 해먹던 냄비는 4인가족 닭도리탕 해먹을때 쓰는 냄비 정도 크기 입니다.


거기에 +@ 고칼로리 음식이죠


평소 먹는 저녁양은







이정도 크기의 냄비에 한가득 해먹습니다 물론 재료는 고기고기괴고기 튀김튀김튀김 기름기름기름 입니다.


지금까지 제가 뭘 해먹었는지 사진을 올리면 보시는 분들 위장테러날수도 있으니 이곳엔 올리지 않겠습니다.



저 만큼 먹던 것에서


다이어트를 시작하고 나선


조금 큰 국그릇 정도 사이즈의 냄비를 사용하기 시작했습니다.


많이 먹고 싶어도 그 냄비만 사용한다면 들어가는 재료의 양은 줄어드니까요.


그리고 보통 라면을 2개를 끓이고 부재료를 넣었는데 라면을 1개 끓이고 나머지는 고구마를 넣어 봤습니다.


포만감이 크기 때문이죠. 저녁의 탄수화물을 밀가루 에서  고구마나 감자 같은 것으로 넘어가는데 적응 하기 


위해서 이기도 합니다.





운동을 안한것은 지금까지 경험에 의하면 저같은 의지박약 비만인은 운동을 하면


"운동을 했으니까 난 이만큼은 좀더 먹어도 될거야"


라고 생각합니다. 정신나간 보상심리가 발동하고 더먹게 되죠. 운동을 해도 


제가 이번주에 먹은 식단보다는 더 줄여야 합니다.


제가 20대 초반에 살을 뺼땐 운동을 하면서 먹고싶은건 거의 챙겨먹으면서 살을 뻇었는데요 이제는


나이 먹어서 그렇게 못합니다.. 게다가 너무 과체중이기 떄문에 강도높은 운동하면 무릎이나 허리에 무리가 가기 때문이죠


(따로 PT를 받으시는 분은 전문가의 지도 아래 정확한 자세를 취할 수 있으니 운동을 하셔도 좋습니다.)



그렇기 때문에 당분간은 운동없이 식단 조절만으로 몸무게를 줄여나갈 생각이고 중간중간 스트레칭이나


간단한 체조를 늘려 가면서 몸을 적응시킬 생각입니다.


일단 지금의 가장 큰 목표는 다이어트에 적합한 식단에 몸을 적응 시키는 것이니까요.



목표 체중인 72kg까지 가려면 100kg에서 28kg이나 감량을 해야 합니다.


28kg은 먹기도 힘든데 단기간에 뺄 생각은 절대 하지 않습니다.


살찌는데도 기간이 걸렸는데 이걸 단기간에 혼자서 감량한다는건 욕심이 과한 거죠


목표체중까지 도달하는데는 짧게는 1년 길게는 2~3년을 생각 하고 있습니다.


이제 겨우 1주가 지났을 뿐이죠 아직 갈길이 먼데 처음부터 무리 하지 말고 천천히 꾸준히 체중을 


감량해 보려고 합니다. 


궁금한 점은 댓글 남겨 주세요.





처음으로 해보는 초대장 배포 입니다.


신청은 비밀댓글로 남겨주세요


1. 이전에 블로그를 운영했다면 해당 블로그의 주소

2. 티스토리에서 운영할 블로그의 주제

3. 초대장을 받을 이메일.


* 초대장을 받고 일주일 이내에 사용하지 않으시면 다음분에게 배포합니다.

* 블로그를 운영해본 경험이 있으신 분에게 우선적으로 배포 합니다.

* 운영할 주제와 어떻게 운영할지 상세히 적으신 분에게 우선적으로 배포합니다.

* 초대장 배포가 종료되면 글머리는 [초대장 배포 종료]로 수정 하겠습니다.



+ Recent posts