[CNight2011] ---- == Round 0 == ë§Žì´ ëª¨ì¼ê±°ë¼ 예ìƒí–ˆëŠ”ë° 6피ì—ì„œ ë‚´ë ¤ì˜¨ ê·¸ ì¸ì› ê·¸ëŒ€ë¡œë¼ ë‹¹í™© ã…‹ã…‹ ê¶Œìˆœì˜ í˜• 만나서 ë°˜ê°€ì› ì–´ìš¬ã…‹ã…‹ 모ì´ìžë§ˆìž ê°ìž í• ì¼. 나는 ê³¼ì œ+ ë™ì í• ë‹¹ ì—°êµ¬í•˜ê³ íƒœì§„ì´ëŠ” ëí–ˆë”ë¼, 순ì˜í˜•ì´ëž‘ ì¢…í•˜í˜•ì€ ìŠ¤íƒ€í•¨ ã…‹ã…‹ã…‹ 순ì˜í˜• 발림 ã…‹ã…‹ã…‹ * ì•…ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ã…‹ - [권순ì˜] == Round 1 == 지ì›ì´ 누나 오셨다. 누님께 ë°°ì—´ê³¼ í¬ì¸í„°ì˜ 기본, ì£¼ì†Œì— ì˜í•œ .. ëë¼ê³ 해야하나 암튼. 근본ì 으로 ë°°ì—´ì€ í¬ì¸í„°ì™€ ë™ì¼. ì´ëŸ°ê²ƒì„ ë°°ì› ë‹¤. ê·¸ë¦¬ê³ malloc ì“°ëŠ”ë²•ì„ ë“¤ì—ˆìŒ. 런타임ì—러나서 물어본것ì´ì˜€ëŠ”ë° ì˜¤ë¥˜ ì›ì¸ì€ ì„¤ëª…ì„ ë“£ê³ ë‚˜ì„œ ì´í•´í–ˆìŒ. í•´ê²°ì€ ì–´ì©Œë‹¤ë³´ë‹ˆ ë˜ì—ˆìŒã…‹ == Round 1.5 == ì§„ê²½ì´ ë“±ìž¥ 진경x 경진 대회 ê¸°ì¶œë¬¸ì œ 풀어줌. 우왕. malloc 물어봤ë”니 ì‰ì‰ 나옴. ì—ì‹œ 진경ì´ìž„ == Round 2 == ë§í¬ë“œ 리스트 ë°°ì› ìŒ ì´ê²Œ 11í•™ë…„ë„ ìˆ˜ëŠ¥ 언어ì˜ì—ì— ì¶œì œë˜ì—ˆë‹¤ë‹ˆ ë‚œ ê¸°ì–µì— ì—†ëŠ”ë° í•˜ì§€ë§Œ ë‚œ ë§žì•˜ê² ì§€ 언어ì—ì„œ ë¹„ë¬¸í•™ì€ í•˜ë‚˜ë„ ì•ˆ í‹€ë ¸ì—ˆìœ¼ë‹ˆ! 순ì˜í˜•ì´ ì†Œê°œí•˜ê³ , ì¢…í•˜í˜•ì´ ê°œë…설명 í•˜ê³ , 지ì›ì´ëˆ„나가 쓰는 ë²•ì„ ê°€ë¥´ì³ ì£¼ì…¨ìŒ. ì¢…í•˜í˜•ì´ ë”블 ë§í¬ë“œ ë¦¬ìŠ¤íŠ¸ë„ í•˜ìžê³ í–ˆëŠ”ë° ì‹œê°„ê´€ê³„ìƒ í•˜ì§€ë§ìžê³ 하여 기ê°. sortingì´ëž‘ 스íƒí? ì¸ê°€ í•œë‹¤ê³ í–ˆì—ˆëŠ”ë° ì´ê²ƒë„ ê²°êµ ì•ˆí•¨ ã…‹ == Round 3 == í™í˜œ ë¨¹ìŒ ë‹¤ìŒì—” 볶ìŒì§¬ë½•ì‹œì¼œë´ì•¼ì§€,. 군대얘기나옴. 으아아아 ì§„ê²½ì´ ì•ˆëŒ€ë¼ê³ ìžëŠ”척하면서 웃기는건 다 ë“£ê³ ì›ƒê³ ìžˆì—ˆìŒã…‹ 다들 치우기싫어서 다 ë¨¹ê³ ì„œ 한참ë™ì•ˆ 시간ëˆê±´ 공공연한 진실. == Round 4 == Round 3ì•ˆê°”ë‹¤ê³ íƒœì§„ì´ê°€ 그런다. ëª°ë¼ ì´ê±° êµ¬ë¶„ì€ ì¢…í•˜í˜•ì´ ë§í•œ ê·¸ ë¼ìš´ë“œê°€ ì•„ë‹ˆë¼ ê·¸ëƒ¥ ë‚´ê°€ ìƒê°í•˜ëŠ” ë¼ìš´ë“œìž„ㅇㄹㅇㄹㅇㄹ ìž ì„ ì«“ìžê³ 시작한 카트가 í•´ëœ¨ê³ í•´ì‚°í• ë•Œê¹Œì§€ ì´ì–´ì§ -_- ë§‰íŒ ì—ì „ì´ ë¹ˆë²ˆí–ˆê³ ë§‰ìžë„ í¥í•˜ê³ 그런 시간ì´ì˜€ìŒ. ë‚œ 카트가 없어서 한참ì´ë‚˜ ã…œã… . == ë°°ì—´ == Round 0,1 ---- ë°°ì—´ì´ ê·¼ë³¸ì 으로 í¬ì¸í„°ëž€ ê²ƒì€ ì´ë¯¸ ì•Œê³ ìžˆì—ˆìœ¼ë‚˜ ì‹¤ì œ 컴파ì¼ëŸ¬ì—ì„œ ì´ëŸ°ì‹ìœ¼ë¡œ 표현 ëœë‹¤ëŠ” ê²ƒì„ ë°°ì› ë‹¤. ex) int arr[5]; ë¼ê³ 한다면 printf("%d",arr); -> arrì˜ ì£¼ì†Œê°€ 나온다. -> í¬ì¸í„° ì—°ì‚°ìžë¥¼ ë™ì›í•´ì„œ 표현하ìžë©´ &arr[0]ì´ ëœë‹¤. arr[i] = *&(arr[0]+sizeof(int)*i); arr[i][j] *&(arr[0][0] sizeof(int)*i*j+sizeof(int)*i); -> ë§žê² ì§€ì—¬...? ì‹¤ì œ 메모리ìƒì—서는 2ì°¨ì›ì´ë“ 3ì°¨ì›ì´ë“ 메모리ìƒì—서는 그냥 ì„ í˜•ìœ¼ë¡œ ì €ìž¥ëœë‹¤. 사실 ì´ê²ƒë„ 새싹êµì‹¤ë•Œ ì´ë¯¸ ë°°ì› ë˜ ë‚´ìš©. ì›í¬í˜•.. ë³´ê³ ì‹¶ì–´ìš”. == í¬ì¸í„° == Round 0,1 ---- datatype* : í¬ì¸í„° ìžë£Œí˜• ì„ ì–¸ë²• -> ì´ê²Œ ë…ìžì ì¸ ìžë£Œí˜•ì´ë¼ê³ ë´ë„ 무관. *val_name : 해당 í¬ì¸í„°ë³€ìˆ˜ê°€ 가르키는 ë³€ìˆ˜ì˜ ê°’ì„ ì°¸ì¡° &val : &ì—°ì‚°ìž ìš°ì¸¡ì˜ ì£¼ì†Œê°’ì„ ë¶ˆëŸ¬ì˜¨ë‹¤.(ì´ê±´ valìžë¦¬ì— 들어가는 변수가 í¬ì¸í„° ìžë£Œí˜•ì´ ì•„ë‹ˆì—¬ë„ ë¨) í¬ì¸í„° ë³€ìˆ˜ì— ì£¼ì†Œê°’ì´ ì €ìž¥ëœë‹¤ê³ ìƒê°í•˜ëŠ”것보다. ê·¸ ì£¼ì†Œì— í•´ë‹¹í•˜ëŠ” 변수를 ê°€ë¥´í‚¨ë‹¤ê³ ìƒê°í•˜ëŠ”게 옳다. 다중 í¬ì¸í„°ë„ ë°°ì› ë‹¤. == 구조체 == Round 1 ---- 1. ì„ ì–¸ë²• 1) typedef struct name{ data... data... ... }nickname; ì‚¬ìš©í• ë• nickname만 ì¨ì£¼ë©´ ëœë‹¤. 2) struct name{ date... ... }; ì‚¬ìš©í• ë•Œë§ˆë‹¤ struct name ë¼ê³ 해야한다. 3) typedef struct{ data... ... }nickname; 닉네임만 ì„ ì–¸í•˜ëŠ” 방법. 비표준ì´ëž€ë‹¤. 2. ê°œë… ì˜ë¯¸ê°€ 통하는(?) ìœ ìš©í•œ (?) ë°ì´í„°ë“¤ì„ 그룹화 í•œë‹¤ê³ ìƒê°í•˜ë©´ ëœë‹¤. ì¼ë‹¨ í•´ë‘ë©´ sortí• ë•Œ 매우 편하다 한가지만 sortí•´ë‘ë©´ ë‚˜ë¨¸ì§€ë„ ë”°ë¼ì˜¤ë‹ˆê¹Œ! == ë§í¬ë“œ 리스트 == ì¼ë‹¨ ë˜í•˜ëŠ” 것 ì¸ì§„ ì œëŒ€ë¡œ 알았다. ì‚¬ìš©ë²•ì€ ìƒê°ì´ 나질 않는다.. 사실 ì´ë•Œ ì¡¸ë ¤ì„œ 한귀로 ë“£ê³ ê±°ì˜ í˜ë¦¼.. Cì–¸ì–´ì— ->ì´ëŸ° ì—°ì‚°ìžê°€ 있다는건 알아냄.. ë”ê°€ ìƒë‹¹ížˆ ì§ê´€ì ìž„. ë§í¬ë“œ 리스트가ëëƒ! í•œ '노드'ì— ì˜ë¯¸ê°€ 있는 ê°’ê³¼ ë‹¤ìŒ ë…¸ë“œì˜ ì£¼ì†Œë¥¼ 가르키는 í¬ì¸í„°ë¥¼ 담는다. 다ìŒë…¸ë“œëŠ” ê·¸ 다ìŒë…¸ë“œë¥¼ 가르킨다. ì´ê²Œ ê³„ì† ë°˜ë³µëœë‹¤. 보통 ëì€ Nullì„ ê°€ë¥´í‚¤ëŠ” í¬ì¸í„°ê°€ì˜¨ë‹¤. 하지만 ë§¨ì²˜ìŒ ë…¸ë“œë¥¼ 가르켜 순환형 리스트가 ë 수 ë„ ìžˆë‹¤. ìŒë°©í˜•ì„±ë„ 존재한다. 메모리ìƒì— 나란히 ì„ ì–¸ë˜ì–´ 주소값 ê°„ê²©ì´ ì¼ì •í•œ 배열과는 달리 ë§í¬ë“œ 리스트는 규칙ì„ì´ ì¡´ìž¬í•˜ì§€ 않기 ë•Œë¬¸ì— ê°’ì„찾는ë°ëŠ” ì‹œê°„ì´ ë§Žì´ ê±¸ë¦¬ëŠ” 단ì ì´ìžˆë‹¤ë§Œ. 목ë¡ì˜ ì¤‘ê°„ì— ì‚½ìž…,ì‚ì œê°€ 그냥 ë°°ì—´ì— ë¹„í•´ 매우 편리하므로 ìžì£¼ 사용ëœë‹¤. 즉, 프로그래머는 íž˜ë“¤ê³ ì‚¬ìš©ìžëŠ” 편하다는얘기... 하... == ë™ì í• ë‹¹ == <stdlib.h> ì„ ì„ ì–¸í•œë‹¤. ê·¸ ë’¤ mallocì„ ì“´ë‹¤. ex) float* dia =(float*)malloc(sizeof(float)*10); 10ì€ ë°°ì—´ë¡œ 치면 dia'[10]'ì„í•œ ì…ˆì´ ëœë‹¤. ì´ëŒ€ë¡œ ë¼ë©´ 변수가 10ê°œì§œë¦¬ì¸ ë°°ì—´ì„ heap ì„ ì–¸í•œê²ƒê³¼ 같다. dia[10]ì´ëž‘ 다른ì ì€.. dia[10]ì€ stackì— í• ë‹¹ëœë‹¤ëŠ”ê²ƒì´ ë‹¤ë¥¸ì ì´ë‹¤. 본래 ì˜ë„대로ë¼ë©´ ë°°ì—´ì´ '터지는'때를 ìºì¹˜í•´ì„œ realloc으로 ë°°ì—´ì˜ ê°¯ìˆ˜ë¥¼ ëŠ˜ë ¤ì£¼ë ¤ê³ í–ˆìœ¼ë‚˜ C언어ì—ì„œ int a[2]={1,2} ì„ ì–¸í›„ printf("%d",a[2]); ê°™ì€ ê²½ìš°ë„ í—ˆìš©í•˜ë¯€ë¡œ ì–¸ì œ 터지는지 ì•Œ 수가 없었다.. 그냥 10ê°œ ì§€ì •í•´ì£¼ì—ˆìœ¼ë‹ˆ ë‚´ê°€ 알아서 10개째ì¼ë•Œ reallocì„ ì¨ì¤˜ì•¼ 했다. 암튼 그래서 횟수를 ì¸¡ì •í• int i;를 ë§Œë“¤ê³ if(i%10==0)realloc(dia,sizeof(float)*10*k++);ì´ë¼ê³ 했다. 당연히 kë„ ì„ ì–¸ëœ ë³€ìˆ˜. 그랬ë”니 잘ëŒì•„간다. 기분 좋다! * 진경ì´ê°€ ë§í•˜ê¸¸ ì´ê±´ 사람입장ì—ì„ ì“°ê¸° ì°¸ 편하지만 비효율ì ì´ë¼ê³ 한다. ë§Žì€ ê²½ìš°ì— ë§¤ëª¨ë¦¬ë¥¼ 복사해야하니까. 그러니까 ì• ì´ˆì— heapì— ì—„ì²í° ê³µê°„ì„ í• ë‹¹í•˜ê³ , 버í¼ë¥¼ 통해 ê°’ì„ ìž„ì‹œì €ìž¥í•œë’¤, 다차면 í°ê³µê°„으로 ì˜®ê¸°ê³ ìž„ë ¥ì´ ë나면 reallocì„ í†µí•´ í°ê³µê°„ì„ ì•Œë§žê²Œ 줄여주는 ê·¸ëŸ°ê²ƒì´ ë” ì¢‹ë‹¤ê³ í•˜ëŠ”ë° ë‚œ ìž˜ëª¨ë¥´ê² ë‹¼