/*
ID: ****
LANG: C
TASK: clock
*/

#define __DEBUG__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* itoc(int num);

int main()
{
    char* temp;
    char time[6];
    int hour;
    int min;
    char out[100];
#ifndef __DEBUG__
    FILE *fin;
    FILE *fout;
   
    fin = fopen("clock.in","r");
    fout = fopen("clock.out","w");
    fscanf(fin,"%s",time);
#else
    printf("Input time : ");
    scanf("%s",time);
#endif
   
    temp = strtok(time,":");
    hour = atoi(temp);
    temp = strtok(NULL,":");
    min = atoi(temp);
   
    switch(min)
    {
    case 0:
        sprintf(out,"%s o'clock",itoc(hour));
        break;
    case 15:
        sprintf(out,"Quarter past %s",itoc(hour));
        break;
    case 45:
        sprintf(out,"Quarter to %s",itoc(hour%12+1));
        break;
    default:
        if(min>45)
            sprintf(out,"%s to %s",itoc(60-min),itoc(hour%12+1));
        else
            sprintf(out,"%s %s",itoc(hour),itoc(min));
    }
    out[0]=toupper(out[0]);
#ifndef __DEBUG__
    fprintf(fout,"%sn",out);
    fclose(fin);
    fclose(fout);
#else
    printf("%sn",out);
#endif
    return 0;
}

char* itoc(int num)
{
    char* retval;
    retval = (char*)malloc(sizeof(char)*20);
   
    if(num<20)
    {
        switch(num)
        {
        case 1:    return "one";
        case 2:    return "two";
        case 3:    return "three";
        case 4:    return "four";
        case 5:    return "five";
        case 6:    return "six";
        case 7:    return "seven";
        case 8:    return "eight";
        case 9:    return "nine";
        case 10: return "ten";
        case 11: return "eleven";
        case 12: return "twelve";
        case 13: return "thirteen";
        case 14: return "fourteen";
        case 15: return "fifteen";
        case 16: return "sixteen";
        case 17: return "seventeen";
        case 18: return "eighteen";
        case 19: return "nineteen";
        default: return "";
        }
    }
    else
    {
        switch(num/10)
        {
        case 2:
            sprintf(retval,"twenty");
            break;
        case 3:
            sprintf(retval,"thirty");
            break;
        case 4:
            sprintf(retval,"forty");
            break;
        case 5:
            sprintf(retval,"fifty");
            break;
        }

        switch(num%10)
        {
        case 0:
            break;
        case 1:
            strcat(retval,"-one");
            break;
        case 2:
            strcat(retval,"-two");
            break;
        case 3:
            strcat(retval,"-three");
            break;
        case 4:
            strcat(retval,"-four");
            break;
        case 5:
            strcat(retval,"-five");
            break;
        case 6:
            strcat(retval,"-six");
            break;
        case 7:
            strcat(retval,"-seven");
            break;
        case 8:
            strcat(retval,"-eight");
            break;
        case 9:
            strcat(retval,"-nine");
            break;
        }
    }
    return retval;
}

상당히 간단한 문제였다.

'Developing' 카테고리의 다른 글

PERL에서의 웹 프로그래밍  (0) 2006.06.03
USACO Training - Barn Repair  (0) 2006.05.09
USACO Training - Mixing Milk  (0) 2006.05.03

/*
ID: ****
LANG: C
TASK: barn1
*/

/*#define __DEBUG__*/
#define MAXSTALL1 200+1

#include <stdio.h>

int main()
{
    int max, stal, cow;
    int i, temp;
    int before = 0;
    int total = 0;
    int ival[MAXSTALL1];
    int status[MAXSTALL1];
   
    for(i=0 ; i<MAXSTALL1 ; i++)
    {
        ival[i] = 0;
        status[i] = 0;
    }
   
#ifndef __DEBUG__
    FILE *fin;
    FILE *fout;
   
    fin = fopen("barn1.in","r");
    fout = fopen("barn1.out","w");
    fscanf(fin,"%d %d %d",&max,&stal,&cow);
#else
    printf("Input max & stall & cow : ");
    scanf("%d %d %d",&max,&stal,&cow);
#endif
   
    for(i=0 ; i<cow ; i++)
    {
#ifndef __DEBUG__
        fscanf(fin,"%d",&temp);
#else
        scanf("%d",&temp);
#endif
        status[temp] = 1;
    }
   
    for(i=0 ; i<=stal ; i++)
    {
        if(status[i] == 1)
        {
            if(before != 0)
                ival[i-before-1]++;
            before = i;
        }
    }
   
    max--;
    for(i=stal ; i>0 ; i--)
    {
        if(max > 0)
        {
            if(ival[i] >= max)
            {
                total += (ival[i] - max)*i;
                max = 0;
            }
            else
                max -= ival[i];
        }
        else
            total += ival[i]*i;
    }
#ifndef __DEBUG__
    fprintf(fout,"%dn",total+cow);
    fclose(fin);
    fclose(fout);
#else
    printf("%dn",total+cow);
#endif
    return 0;
}

저번 문제와 비슷한 접근 방법으로 문제를 해결했다.

주어진 갯수의 널판지로 최소한의 길이의 널판지를 이용해서 헛간을 고치겠다는 것이 문제였다. 비어있는 칸은 반드시 고칠 필요가 없고, 소가 있는 칸만 고치면 되므로, 소가 있는 칸 사이의 넓이가 가장 넓은 곳 부터 비우는 방식으로 널판지 갯수를 맞췄다.

소가 있는 칸 번호가 반드시 순서대로 들어오는 것은 아니므로 연산이 더 필요했다.

'Developing' 카테고리의 다른 글

PERL에서의 웹 프로그래밍  (0) 2006.06.03
USACO Training - What Time Is It?  (0) 2006.05.15
USACO Training - Mixing Milk  (0) 2006.05.03

구입할 우유의 양과 구입할 수 있는 목장의 수를 입력 받은 뒤에, 각 목장에서 판매할 수 있는 우유의 양과 가격을 입력받는다.

단위당 우유의 가격이 0~1000으로 한정되어 있는 것에 착안하여 1001짜리 배열을 생성한 뒤에 0으로 초기화 하고, 각 가격별로 구입할 수 있는 양을 더해서 0부터 시작해서 1000까지 구입할 양만큼만 값을 계산하도록 했다.

'Developing' 카테고리의 다른 글

PERL에서의 웹 프로그래밍  (0) 2006.06.03
USACO Training - What Time Is It?  (0) 2006.05.15
USACO Training - Barn Repair  (0) 2006.05.09

Feb 15 15:42:21 meye kernel: NETDEV WATCHDOG: eth0: transmit timed out
Feb 15 15:42:21 meye kernel: eth0: Tx queue start entry 4  dirty entry 0.
Feb 15 15:42:21 meye kernel: eth0:  Tx descriptor 0 is ffffffff. (queue head)
Feb 15 15:42:21 meye kernel: eth0:  Tx descriptor 1 is ffffffff.
Feb 15 15:42:21 meye kernel: eth0:  Tx descriptor 2 is ffffffff.
Feb 15 15:42:21 meye kernel: eth0:  Tx descriptor 3 is ffffffff.
Feb 15 15:42:21 meye kernel: eth0: link up, 100Mbps, full-duplex, lpa 0xFFFF

위와 같은 메시지가 커널 로그에 남으면서 네트워크 연결에 문제가 생길때가 있다.

이 경우는 CPU가 하나인 서버에서 APIC 설정이 문제가 될때, 이런 문제가 발생할 수 있다고 한다. 따라서, APIC 설정을 꺼주면 되는데, 부트로더에 커널 옵션으로 "noapic"을 넣어주면 된다고 한다.

'Operating' 카테고리의 다른 글

우분투 XGL/compiz  (0) 2006.08.21
리눅스 콘솔에서 스크립트 실행시, bad interpreter  (0) 2006.02.07
feel free, Opera!  (0) 2005.09.21

리눅스 콘솔에서 스크립트를 실행하면 아무 문제도 없는데, bad interpreter 에러가 발생하면서 실행되지 않는 경우가 있다. 이 스크립트가 CGI일 경우에는 "Premature end of script headers" 라는 메시지와 함께 500에러가 발생한다.

이런 에러의 원인은 스크립트 파일 포멧이 DOS 포멧으로 되어있기 때문이다. 그렇다면 파일 포멧을 UNIX로 변환해주면 되는데, 그 방법중에 하나는 VIM 을 이용하는 것이다.

vim 에서, 명령어 모드에서 다음을 입력한다.

:set ff=unix[enter]


'Operating' 카테고리의 다른 글

APIC 설정으로 인한 네트워크 문제  (0) 2006.02.15
feel free, Opera!  (0) 2005.09.21
스팸 메일 수집을 막는 방법  (0) 2004.12.10

빠르기로 유명한 브라우저 오페라를 무료로 배포하기 시작했다.

얼마전에 10주년 기념행사로 e-mail 주소만 알려주면, 오페라 등록코드를 무료로 나눠주는 행사를 하더니만 이렇게 되었다. 현재 오페라 공식 사이트에 방문해보면 대문에 'feel free'라는 큼지막한 문구를 넣고 바로 오페라를 다운로드 받을수 있게 해놓았다.

공식사이트에는 앞으로는 '프리미엄 서비스'로 돈 벌겠다고 하는 것 같지만 아무래도 결국 IE의 높은 점유율과 Firefox의 추격에 강수를 둔 것만 같은 느낌을 지울수 없다.

출처 : opera.com

웹페이지에 다음 링크를 넣어두면, 수집한 메일 DB를 못쓰게 만든다고 한다. 그걸로 먹고사는 사람에게는 안됐지만, 귀찮은 스팸을 조금이라도 막을 수 있는 방법

<a href="http://english-1363395239.spampoison.com">Fight Spam! Click Here!</a>

출처 : Spam Poison Community

'Operating' 카테고리의 다른 글

APIC 설정으로 인한 네트워크 문제  (0) 2006.02.15
리눅스 콘솔에서 스크립트 실행시, bad interpreter  (0) 2006.02.07
feel free, Opera!  (0) 2005.09.21

+ Recent posts