본문 바로가기

전체 글

(267)
scanf 의 문제점 컴퓨터는 입력을 받을 때 버퍼라는 것을 이용해서 입력의 처리를 효율적으로 하고 있습니다. abcd를 입력할때 a따로 b따로 c따로 입력되는것이 아니라 , abcd 를 stdin에 저장하고 마지막으로 개행문제가 입력되면 이 stdin(버퍼)에서 꺼내서 처리합니다. 그런데 scanf 는 개행문자가 나오기 직전까지 버퍼에서 읽어드린후 버퍼에서 삭제시켜 버립니다. 다음과 같은상황에 문제가 생길 수 있어요 scanf("%d", &num); stdin(버퍼(입력스트림)) 에 123\n이 들어가 있음 이게 끝나고 나면 stdin 에 123은 삭제되고 \n만 남음 scanf("%c", &charictar); // 남은 \n 때문에 여기에 입력을 치기도 전에 \n이 들어가게됨 [두번째예시] printf("문자열을 입력하..
우선순위 큐 리스트 이용 ( 삽입 O(1), 삭제 O(n)) ) 힙 이용 ( O(logn) O(logn) ) 힙이란 ? 완전 이진 트리 의 일종 [힙정렬 구현 ] #include void heapSort(vector &arr){ priority_queue h; // 가장 큰 값을 먼저 뱉게 되어있음 for ( int i =0 ; i MAX_N } 맨마지막에 넣고, 비교하면서..
Queue (배열로 원형큐만들기) 구현 #include #define MAX_N 100 int front; int rear; int queue[MAX_N]; void init(){ front =0; rear = 0; } int isEmpty(){ return (front == rear); } int isFull(){ return ( (rear+1)%MAX_N == front); } int enqueue(int value){ if (isFull()){ return 0; } else{ queue[rear ] = value; rear ++; if( rear ==MAX_N){ rear =0; } return 1; } } int dequeue(int *value){ if( isEmpty()){ return 0; }else{ *value = queue[..
스택 구현 top 은 push를 하면 값이 들어갈 곳이라고 할 수 있겟다 #include #define MAX_N 100 int top; int stack[MAX_N]; void stackInit(void){ top = 0; } int stackIsEmpty(void){ return (top =0); } int stackIsFull(void){ return (top == MAX_N); } int stackPush(int value){ if(stackIsFull()){ printf("stack overflow!"); return 0; } stack[top] = value; top++; return 1; } int stackPop(int *value){ if (stackIsEmpty()) { return 0; } to..
C++ Sort 알고리즘 #include sort(start,end) ㄴ [start,end)의 볌위에 있는 인자를 오름차순으로 정렬해주는 함수이다. quick sort 를 기반으로 구현 되어있다. O(nlogn) 비교함수를 사용해서 정렬을 변환할 수 있다. sort(v.begin(), v.end() , compare); sort(v.begin(), v.end() , greater(); sort(v.begin(), v.end() , less(); compare 함수를 잘 만들면 좋을듯 #include #include #include #include using namespace std; class Student{ string name; int age; Student(string name, int age): name(name), a..
14600. [Pro] 성적 데이터베이스 학생과 팀과 시험점수가 있다. 학생은 mID , mTeam , m 학생은 10만명 팀은 5팀 시험점수는 1~5까지 API 는 다음과 같다. - 학생을 넣고 ( 최대 10만회 호출) - 학생을 뺴고 ( 최대 10만회 호출) - 학생의 점수를 업데이트하고 ( 최대 10만회 호출) - 특정팀의 모든 학생 점수를 업데이트하고 ( 최대 10만회 호출) - 특정팀의 1등 점수 ( 동일점수라면 id 값으로 비교)를 구하는 api 가 있다. ( 해당 API 는 최대 100회 호출) 학생을 넣거나 빼거나 특정학생의 점수를 업데이트하는것은 쉬우므로 나중에 생각하자. 특정팀의 1등 점수구하는것은 100회 호출이므로 그냥 전수조사 해도 된다. 특정 팀의 모든 학생 점수를 업데이트 하는것을 생각해야한다. 이때 우리가 사용하지 ..
삼성전자 certi B형(PRO) 팁 Struct 배열 배열 내부의 struct 를 변경하고 싶으면 포인터로 접근해야한다. 문자열 \n 을 기준으로 나누고, 매번 접근하기 어려우니 Edit 에서 만 접근해놓는다. 문자열은 실제로 중요한가? 아니다. 변경되었는지만 중요하다. for(auto it = arr.begin(); it!=arr.end(); it++); [메모리풀] 메모리를 malloc 하지말고 풀을이용해라. 훨씬 편하다. 전역변수로 몇십만개 만들어두고, poolcnt =0 를 사용해라. 사용한 후에 재초기화도 필요없다. 단지 poolcnt =0 으로 두면 된다. 우리는 어차피 poolcnt++하기전에 해당 주소의 값을 변환하고 사용할 것이기 떄문이다. - 만 사용가능 https://www.acmicpc.net/problem/2606 ..
3. 코드리뷰 툴 Gerrit / Swarm 기반 코드리뷰 Git clone 으로 로컬에 코드 다운 git branch checkout 해서 자신이 넣을 브랜치 체크아웃 git push 해서 브랜치에 푸쉬 CI 도구에 의해서 빌드체크, 유닛테스트 체크 등이 됨 병행적으로 코드 리뷰어가 리뷰수행 ========= [Github 기반의 코드리뷰] Remote Repository 에 푸쉬후 Pull Request 해서 반영 요청한다. ====t 정적분석 메모리 leak 을 체크하기 위해서 input을 만듬 > 메모리가 할당, 해제되는 것을 직접 확인해본다. Check 사항 - Buffer Overflow : index 오사용 - Memory : 메모리 누수 ,메모리 오사용, 해제안함등 - Null : Null 을 참조하는 경우..