모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    헬로날개넷님의
    개인페이지입니다
    가입 : 04-06-20
    방문 : 105회
    닉네임변경 이력
    회원차단
    회원차단해제
     

    헬로날개넷님의 댓글입니다.
    번호 제목 댓글날짜 추천/비공감 삭제
    120 아래 윈도우 체험지수 관해서 질문한 사람인데요;; [새창] 2012-06-27 23:13:48 0 삭제
    중고 판매자분이 ssd를 때고 hdd로 바꾼거 아니에요??
    119 SSD 용량...... [새창] 2012-06-27 23:11:58 1 삭제
    가상메모리 해제 / 최대절전모드 해제
    118 20대 여자가 노트북 바꾸려는데 추천 부탁드려도 될까요? [새창] 2012-06-24 23:58:08 0 삭제
    도시바는 평이 안좋아요.
    그리고 msi는 제가 써보고 잇는데
    싼게비지떡이에요 정말 ㅡㅡ............ 소음이 왱왱. 노트북은 정말 성능이 다가 아니에요 ㅋㅋㅋㅋ
    117 20대 여자가 노트북 바꾸려는데 추천 부탁드려도 될까요? [새창] 2012-06-24 23:54:40 0 삭제
    돈만 잇으면 삼성이 최고
    돈값은 합니다~~~~~~
    없으면 그냥 가볍고 싼거 추천....
    작고가벼윤거에 모니터 추가로 사서쓰면 쾌적해요
    116 메인보드 질문이용~~~(그래픽카드 사게요) [새창] 2012-06-24 23:41:42 0 삭제
    1g가 좋은대 모니터 해상도가 1920정도면 별 상관 없어요
    115 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:22:01 1 삭제
    헐. 시프면 성적관리 프로그램은 하면안돼요 ㅋㅋㅋㅋㅋㅋ vc에서도 그대로 돌아가요. 자료구조 과제엿엇어요 저건;;

    식사하는 철학자 가 시프 관련 내용이 그나마 잇을텐데...
    시프는 저도 전혀 이해가 안가서 도움이 안되겟네요 ㅋㅋㅋㅋ

    114 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:19:01 1 삭제
    설명 필요하면... 구글에거 wingnet88 검색하셔서 이글루스? 블로그에 잇어요...
    113 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:09:58 1 삭제
    위에건 성적관리 프로그램.......
    비쥬얼스튜디오 든, 리눅스 gcc이든..잘 돌아가요.........

    fork() pipe() 이런건 저도 전혀 몰라서 없네요 ㅜ_ㅜ
    112 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:08:41 1 삭제
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define NUM 4 //과목수

    typedef struct info{
    unsigned int schoolnum;
    char *name; //동적할당으로 가변길이로 받을예정
    char sex;
    int point[NUM]; //과목수
    int sum;
    int avg;
    int rank;
    }info;
    typedef struct doubleList{ //head - firstnode 는 next,prev 성립, 마지막node의 next 는 NULL 로 설정(순환리스트 X, TAIL X)
    info record;
    struct doubleList * next;
    struct doubleList * prev;
    }doubleList;

    void insert_list(doubleList *head, info record);
    void print_list(doubleList *head);
    void rank_list(doubleList *head); //퀵소트를 이용해 구현
    doubleList* search_list(doubleList *head, int schoolnum); //순차탐색으로 구현
    void delete_list(doubleList *head, int schoolnum);
    void delete_all(doubleList *head);

    void input_data(info *record); //사용자로부터 data를 입력받음
    void rank_Qsort( int *nArr,int *nArr_2, int nStart, int nEnd);
    void swap(int *a, int *b);

    int main(void){
    doubleList *head = (doubleList *)calloc(1,sizeof(doubleList));
    doubleList *search = (doubleList *)calloc(1,sizeof(doubleList));
    info record;
    int input, i;
    int schoolnum;

    while(1){
    printf("1 :: 레코드 입력n2 :: 리스트 출력n3 :: 석차계산n4 :: 특정레코드 검색n5 :: 특정레코드 삭제n6 :: 모든레코드 삭제n7 :: 종료n");
    printf("input number :: ");
    scanf("%d",&input);

    switch(input){
    case 1:
    input_data(&record);
    insert_list(head,record);
    break;
    case 2:
    print_list(head);
    break;
    case 3:
    rank_list(head);
    break;
    case 4:
    printf("검색할 학번 :: ");
    scanf("%d",&schoolnum);
    search = search_list(head, schoolnum);
    printf("n학번 :: %d | 이름 :: %s | 성별 :: %c | 등수 :: %dn",search->record.schoolnum, search->record.name,search->record.sex, search->record.rank);
    for(i=0;i<NUM;i++)
    printf("과목<%d> :: %d | ", i+1, search->record.point[i]);
    printf("n");
    printf("합계 :: %d | 평균 :: %dnn",search->record.sum,search->record.avg);
    break;
    case 5:
    printf("삭제할 학번 :: ");
    scanf("%d",&schoolnum);
    delete_list(head, schoolnum);
    break;
    case 6:
    delete_all(head);
    break;
    case 7:
    system("cls");
    printf("bye bye~~~~n");
    system("pause");
    exit(0);
    break;
    default:
    printf("ERR :: 번호를 잘못 입력하셨습니다.(1~6)n");
    break;
    }
    }
    }

    void insert_list(doubleList *head, info record){
    doubleList *pre_p, *newNode, *p;

    newNode = (doubleList*)malloc(sizeof(doubleList));

    if(newNode == NULL){
    printf("Memory allocation error n");
    exit(0);
    }

    if(head->next == NULL){ //리스트가 비어있을 경우
    head->next = newNode;
    newNode->next = NULL; //꼬리 node에서 next는 NULL로 지정
    newNode->prev = head;
    }else{ //리스트에 이미 자료가 있을 경우(학번에 따라 오름차순 정렬)
    pre_p = head;
    p = head->next;
    while( (p!=NULL)&&(record.schoolnum > p->record.schoolnum) ){ //schoolnum 비교
    pre_p = p;
    p = p->next;
    } //조건에 맞지않는 경우 한칸씩 앞으로 전진
    newNode->next = pre_p->next;
    newNode->prev = pre_p;
    if(p!=NULL) //만약 newNode가 맨 뒤에 삽입될 경우 p는 존재하지 않음
    p->prev = newNode;
    pre_p->next = newNode;
    }
    newNode->record = record;
    }
    void print_list(doubleList *head){
    doubleList *p = head->next;
    int i;
    int count = 0;

    system("cls");
    if(head->next == NULL)
    printf("Empty List!!n");

    while(p!=NULL){
    printf("-------------%d list-------------n",++count);
    printf("학번 :: %d | 이름 :: %s | 성별 :: %c | 등수 :: %dn",p->record.schoolnum, p->record.name,p->record.sex, p->record.rank);
    for(i=0;i<NUM;i++)
    printf("과목<%d> :: %d | ", i+1, p->record.point[i]);
    printf("n");
    printf("합계 :: %d | 평균 :: %dn",p->record.sum,p->record.avg);
    printf("n");
    p = p->next;
    }
    }
    void rank_list(doubleList *head){
    int *nArr[2]; //nArr[0] :: sum값, nArr[1] :: 해당하는 학번값
    int count=0, temp;
    int i;
    doubleList *p = head->next;

    nArr[1] = (int*)calloc(0,sizeof(int)); //점수에 해당하는 학번값 저장
    nArr[0] = (int*)calloc(0,sizeof(int)); //등수를 계산하기위해 점수를 오름차순 정렬 -> 등수 실제 입력시 역으로 입력
    while(p!=NULL){
    count++;
    nArr[0] = (int*)realloc(nArr[0], sizeof(int)*count);
    nArr[1] = (int*)realloc(nArr[1], sizeof(int)*count);
    *(nArr[0]+count-1) = p->record.sum;
    *(nArr[1]+count-1) = p->record.schoolnum;
    p = p->next;
    }
    rank_Qsort(nArr[0],nArr[1],0,count-1); //rank 구하려고 sort를 이용함

    p = head->next; //p가 가르치는 노드 초기화 cuz)다시 링크 타고 들어가기위함

    while(p!=NULL){ //실제로 rank 입력
    for(i=0;i<count;i++){
    if(p->record.schoolnum == *(nArr[1]+i)){
    p->record.rank = count-(i); //퀵소트 수행후 오름차순으로 되어있는데 석차는 내림차순으로 계산해야해서 count - i
    break;
    }
    }
    p=p->next;
    }
    }
    doubleList* search_list(doubleList *head, int schoolnum){
    doubleList *p;
    err: //만약 해당하는 학번이 없을경우 goto문에 의해 여기서부터 다시시작
    p = head->next;
    if(head->next == NULL)
    printf("Emptry List!!n");

    while( (p->record.schoolnum != schoolnum)&&(p!=NULL) ){ // 해당 값을 가지는 노드가 나타날 때 까지 포인터 p를 이동시킴.
    p = p->next;
    if(p == NULL){ //해당하는 학번을 찾을 수 없는 경우
    printf("ERR :: 해당하는 학번이 없습니다n");
    printf("학번 :: ");
    scanf("%d",&schoolnum);
    goto err; //해당하는 학번이 없는경우 search_list 를 다시 시작
    //goto문 사용이유는 p = head->next부터 다시 리셋해야하는데 너무 소스가 길어지기 때문
    }
    }
    return p; // 해당 값을 가지는 노드의 주소값을 반환
    }
    void delete_list(doubleList *head, int schoolnum){
    doubleList *p = NULL;

    p = search_list(head, schoolnum);
    if((*head).next == NULL)
    printf("Emptry List!!n");

    p->prev->next = p->next; //이중연결리스트에서 prev값을 현재 p의 next값에 연결
    if(p->next != NULL) //맨 앞의 노드는 head와 연결했지만 "맨 뒤"의 노드의 next는 NULL로 해놨음
    p->next->prev = p->prev; //이중연결리스트에서 next값을 현재 p의 prev값에 연결

    free(p);
    rank_list(head); //delete를 하면 순위가 바뀌므로 rank를 명령
    }
    void delete_all(doubleList *head){
    doubleList *p = head->next;
    doubleList *deleteNode;

    deleteNode = (doubleList *)malloc(sizeof(doubleList));
    while(p->next != NULL){
    deleteNode = p;
    p = p->next;
    free(deleteNode);
    }
    head->next = NULL;
    }
    void input_data(info *record){
    int i;
    char temp[20]; //구조체에 name을 동적할당으로 받기위한 임시값

    (*record).sum = 0; //과목 점수 입력받을 때 이용하기 위해 초기화

    printf("학번 :: ");
    scanf("%d",&(*record).schoolnum);

    printf("이름 :: ");
    scanf("%s",&temp);
    (*record).name = (char *)calloc(strlen(temp),sizeof(char));
    strcpy((*record).name, temp);
    fflush(stdin);

    while(1){
    printf("성별(M or W) :: ");
    scanf("%c",&(*record).sex);
    fflush(stdin);
    if(((*record).sex == 'M') ||((*record).sex == 'W'))
    break;
    }
    for(i=0;i<NUM;i++){
    printf("과목(%d) :: ", i+1);
    scanf("%d",&(*record).point[i]);
    (*record).sum += (*record).point[i];
    }

    (*record).avg = (*record).sum / NUM;
    (*record).rank = NULL; //rank는 따로 rank 명령이 들어와야 작성
    system("cls");
    }
    void rank_Qsort( int *nArr,int *nArr_2, int nStart, int nEnd){
    int nPivot = nArr[ nStart ];
    int nLeft = nStart + 1;
    int nRight = nEnd;

    // 개수가 적어서 찾을 것이 없는가?
    if( nEnd - nStart <= 0 ){
    return;
    }

    while( 1 ){
    // Left를 찾는다.
    for( ; nLeft <= nEnd ; nLeft++ ){
    if( nPivot < nArr[ nLeft ] ){
    break;
    }
    }

    // Right를 찾는다.
    for( ; nRight > nStart ; nRight-- ){
    if( nPivot > nArr[ nRight ] ){
    break;
    }
    }

    // 바꿔야할 상황이라면 바꾼다.
    if( nLeft <= nEnd && nRight > nStart && nLeft < nRight ){
    swap( &nArr[ nLeft ], &nArr[ nRight ] );
    swap( &nArr_2[ nLeft ], &nArr_2[ nRight ] );
    continue;
    }

    // Left, Right가 모두 범위 밖으로 나갔다면 배열 안의 숫자는 모두 같은 숫자다.
    if( nRight <= nStart && nLeft > nEnd ){
    return;
    }

    // 조건이 된다면 왼쪽 Array를 Recursive로 돌린다.
    if( nRight > nStart ){
    // Pivot과 Right를 바꾼다.
    swap( &nArr[ nStart ], &nArr[ nRight ] );
    swap( &nArr_2[ nStart ], &nArr_2[ nRight ] );
    rank_Qsort( nArr, nArr_2, nStart, nRight );
    }

    // 오른쪽 Array는 지금의 함수를 재사용.
    nStart = nRight + 1;
    nPivot = nArr[ nStart ];

    nLeft = nStart + 1;
    nRight = nEnd;

    // 개수가 적어서 찾을 것이 없는가?
    if( nEnd - nStart <= 0 ){
    return;
    }
    }
    }
    void swap(int *a, int *b){
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
    }
    111 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:07:30 1 삭제
    식사하는 철학자 알고리즘 문제.


    근데....... 보통 학부수준에선

    시스템프로그래밍만 아니면 윈도우- 리눅스 다 되는데 -.-;;
    110 리눅스 안에서 돌아가는 간단한 프로그램 소스 얻을수 있을까요 [새창] 2012-06-24 23:05:37 1 삭제
    #include <stdio.h>
    #include <stdlib.h>

    #define N 5 //5명의 철학자
    #define Left(p) (p)
    #define Right(p) (((p) + 1) % N)

    typedef int *semaphore;

    semaphore chopstick[N];
    semaphore make_semaphore(void);
    int fork(void);
    int pipe(int pd[2]);
    int read(int fd, void *buf, unsigned len);
    int write(int fd, void *buf, unsigned len);
    void philosopher(int p);
    void get_chopstick(int p);
    void return_chopstick(int p);
    void signal(semaphore s);
    void wait(semaphore s);
    void sleep(unsigned seconds);

    int main() //메인함수
    {
    int i;

    for (i = 0; i < N; ++i) { //테이블에 5개의 젓가락을 놓음.
    chopstick[i] = make_semaphore();
    signal(chopstick[i]);
    }
    for (i = 0; i < N; ++i) //5명의 철학자를 생성.
    if (fork() == 0)
    break;
    philosopher(i);

    return 0;
    }

    void philosopher(int p)//철학자 상태 출력함수.
    {
    char *s;
    int i = 1;

    while(1){
    get_chopstick(p);
    printf("t%d Philosopher eat [%d] !n", p, i);
    sleep(1);
    return_chopstick(p);
    printf("t%d Philosopher thinking ! n", p);
    sleep(1);
    i++;
    }
    }

    void get_chopstick(int p) //젓가락을 얻는 함수.
    {
    if (p == 0) {
    wait(chopstick[Right(p)]);
    // printf("%d Philosopher get right chopstick.n", p);
    sleep(1); //데드락 발생 방지
    wait(chopstick[Left(p)]);
    // printf("%d Philosopher get left chopstick.n", p);
    }
    else {
    wait(chopstick[Left(p)]);
    // printf("%d Philosopher get left chopstick.n", p);
    sleep(1); //데드락 발생 방지
    wait(chopstick[Right(p)]);
    // printf("%d Philosopher get right chopstick.n", p);
    }
    }

    void return_chopstick(int p) //젓가락을 반환하는 함수.
    {
    signal(chopstick[Left(p)]);
    // printf("%d Philosopher return left chopstick.n", p);
    signal(chopstick[Right(p)]);
    // printf("%d Philosopher return right chopstick.n", p);
    }

    semaphore make_semaphore(void)// 세마포어 생성함수
    {
    int *sema;

    sema = calloc(2, sizeof(int));
    pipe(sema);

    return sema;
    }

    void wait(semaphore s) //wait 발생이 안될시 에러체크 함수.
    {
    int junk;

    if (read(s[0], &junk, 1) <= 0) {
    printf("ERROR: wait() failed, check semaphore creation.n");
    exit(1);
    }
    }

    void signal(semaphore s) //signal 발생이 안될시 에러체크 함수.
    {
    if (write(s[1], "x", 1) <= 0) {
    printf("ERROR: write() failed, check semaphore creation.n");
    exit(1);
    }
    }

    109 소수구하기 알고리즘에서 시간복잡도를... [새창] 2012-06-24 23:02:51 0 삭제
    아 n의 제곱근 까지만 해봐도 되는구나

    에라토스테네스 체 알고리즘쓰면 복잡도가 얼마나 나올래나............

    은근히 재밋네요 이거 생각해보는것도 ㅋㅋ
    108 메인보드 질문이용~~~(그래픽카드 사게요) [새창] 2012-06-24 22:49:08 0 삭제
    호환은 되지만,
    파워용량 필히 점검하세요. 250은 좀 먹어요

    그리고 ddr2 2gb 박으시면 될꺼같은데,,, ddr3가 아니라 ddr2니까 주의해서 구매하시고요
    107 소수구하기 알고리즘에서 시간복잡도를... [새창] 2012-06-24 22:36:09 0 삭제
    댓글수정이 안되네;;;

    첫번째껀 n까지의 숫자를 n-1번 나눠보니까 O(n^2)이고

    두번째껀 n까지의 숫자를 n보다 작은 소수의 개수만큼 나눠보니까 O(n^2 / log n)이 나온거구요...
    (n보다 작은 소수의 개수는 n / log n )
    106 소수구하기 알고리즘에서 시간복잡도를... [새창] 2012-06-24 22:34:57 0 삭제
    그냥 구조체 내에 1~n 까지 숫자를 저장하고, flag 하나 두어서,

    만약 나눠지는 숫자면 flag 를 1로 바꾸는식으로 구현했어요..

    첫번째꺼는 정말 고전식으로 만약 10이 소수인지 아닌지 알아보려면
    1~9까지 전부다 나눠보는 방식이고,

    두번째꺼는 조금더 나아져서, 10이 소수인지 아닌지 알아보려면

    10보다 작은 소수인 2,3,5,7 을 이용해서 나눠보는 방식으로 구현했어요...



    [1] [2] [3] [4] [5] [6] [7] [8] [9]

     
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈