/*

카카오 신입 공채 1차 코딩 테스트(다트 게임)

 

카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다.

갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다.

 

다트 게임은 총 3번의 기회로 구성된다.

각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다.

점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수^1 , 점수^2 , 점수^3 )으로 계산된다.

옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2배로 만든다. 아차상(#) 당첨 시 해당 점수는 마이너스된다.

스타상(*)은 첫 번째 기회에서도 나올 수 있다. 이 경우 첫 번째 스타상(*)의 점수만 2배가 된다. (예제 4번 참고)

스타상(*)의 효과는 다른 스타상(*)의 효과와 중첩될 수 있다. 이 경우 중첩된 스타상(*) 점수는 4배가 된다. (예제 4번 참고)

스타상(*)의 효과는 아차상(#)의 효과와 중첩될 수 있다. 이 경우 중첩된 아차상(#)의 점수는 -2배가 된다. (예제 5번 참고)

Single(S), Double(D), Triple(T)은 점수마다 하나씩 존재한다.

스타상(*), 아차상(#)은 점수마다 둘 중 하나만 존재할 수 있으며, 존재하지 않을 수도 있다.

0~10의 정수와 문자 S, D, T, *, #로 구성된 문자열이 입력될 시 총점수를 반환하는 함수를 작성하라.

 

1. 입력 형식

“점수|보너스|[옵션]”으로 이루어진 문자열 3세트.

예) 1S2D*3T

 

점수는 0에서 10 사이의 정수이다.

보너스는 S, D, T 중 하나이다.

옵선은 *이나 # 중 하나이며, 없을 수도 있다.

 

 

2. 출력 형식

3번의 기회에서 얻은 점수 합계에 해당하는 정수값을 출력한다.

예) 37

 

3. 입출력 예제

예제 dartResult answer 설명

1 1S2D*3T 37 1^1 * 2 + 2^2 * 2 + 3^3

2 1D2S#10S 9 1^2 + 2^1 * (-1) + 10^1

3 1D2S0T 3 1^2 + 2^1 + 0^3

4 1S*2T*3S 23 1^1 * 2 * 2 + 2^3 * 2 + 3^1

5 1D#2S*3S 5 1^2 * (-1) * 2 + 2^1 * 2 + 3^1

6 1T2D3D# -4 1^3 + 2^2 + 3^2 * (-1)

7 1D2S3T* 59 1^2 + 2^1 * 2 + 3^3 * 2

*/

 

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <math.h>

 

#define II_NUMBER 100

#define II_BONUS 101

#define II_OPTION 102

 

int main(int argc, char *argv[])

{

int NN=7;

char const_sample_str[7][100] = 

{

"1S2D*3T",

"1D2S#10S",

"1D2S0T",

"1S*2T*3S",

"1D#2S*3S",

"1T2D3D#",

"1D2S3T*",

};

char str[100];

int ii,kk,type,summation;

int number, bonus_number;

char tmp[10];

 

    type = II_NUMBER;

for(kk=0; kk<NN; kk++)

{

memset(str,0x00,sizeof(str));

strcpy(str,const_sample_str[kk]);

 

        ii=0;

summation=0;

while(1)

{

if(type == II_NUMBER)

{

memset(tmp,0x00,sizeof(tmp));

sprintf(tmp, "%c", str[ii]);

 

number = atoi(tmp);

 

printf("II_NUMBER:[%c][%d]\n", str[ii], number);

 

type = II_BONUS;

}

else if(type == II_BONUS)

{

if(str[ii]=='S') bonus_number = pow( number, 1);

else if(str[ii]=='D') bonus_number = pow( number, 2);

else if(str[ii]=='T') bonus_number = pow( number, 3);

 

summation = summation + bonus_number;

 

printf("II_BONUS:[%c][%d]=[%d]\n", str[ii], bonus_number, summation);

 

type = II_OPTION;

}

else if(type == II_OPTION)

{

if(!(str[ii]=='*' || str[ii] == '#'))

{

type = II_NUMBER;

continue;

}

 

if(str[ii] == '*')

{

summation = summation + bonus_number;

}

else if(str[ii] == '#')

{

summation = summation - bonus_number;

}

printf("II_OPTION:[%c][%d]=[%d]\n", str[ii], bonus_number, summation);

 

type = II_NUMBER;

}

 

ii++;

if(ii==strlen(str)) break;

}

printf("str(%s),summation(%d)\n", str, summation);

}

return 0;

}

 

/*결과

bash-3.1$

bash-3.1$

bash-3.1$ 30

II_NUMBER:[1][1]

II_BONUS:[S][1]=[1]

II_NUMBER:[2][2]

II_BONUS:[D][4]=[5]

II_OPTION:[*][4]=[9]

II_NUMBER:[3][3]

II_BONUS:[T][27]=[36]

str(1S2D*3T),summation(36)

II_NUMBER:[1][1]

II_BONUS:[D][1]=[1]

II_NUMBER:[2][2]

II_BONUS:[S][2]=[3]

II_OPTION:[#][2]=[1]

II_NUMBER:[1][1]

II_BONUS:[0][2]=[3]

II_NUMBER:[S][0]

str(1D2S#10S),summation(3)

II_BONUS:[1][2]=[2]

II_NUMBER:[D][0]

II_BONUS:[2][2]=[4]

II_NUMBER:[S][0]

II_BONUS:[0][2]=[6]

II_NUMBER:[T][0]

str(1D2S0T),summation(6)

II_BONUS:[1][2]=[2]

II_NUMBER:[S][0]

II_BONUS:[*][2]=[4]

II_NUMBER:[2][2]

II_BONUS:[T][8]=[12]

II_OPTION:[*][8]=[20]

II_NUMBER:[3][3]

II_BONUS:[S][3]=[23]

str(1S*2T*3S),summation(23)

II_NUMBER:[1][1]

II_BONUS:[D][1]=[1]

II_OPTION:[#][1]=[0]

II_NUMBER:[2][2]

II_BONUS:[S][2]=[2]

II_OPTION:[*][2]=[4]

II_NUMBER:[3][3]

II_BONUS:[S][3]=[7]

str(1D#2S*3S),summation(7)

II_NUMBER:[1][1]

II_BONUS:[T][1]=[1]

II_NUMBER:[2][2]

II_BONUS:[D][4]=[5]

II_NUMBER:[3][3]

II_BONUS:[D][9]=[14]

II_OPTION:[#][9]=[5]

str(1T2D3D#),summation(5)

II_NUMBER:[1][1]

II_BONUS:[D][1]=[1]

II_NUMBER:[2][2]

II_BONUS:[S][2]=[3]

II_NUMBER:[3][3]

II_BONUS:[T][27]=[30]

II_OPTION:[*][27]=[57]

str(1D2S3T*),summation(57)

bash-3.1$

*/

 

//strstr로 해결이 안되는 부분에서는 strchr로

//strstr로 해결이 안되는 부분에서는 strchr로

//strstr로 해결이 안되는 부분에서는 strchr로

//strstr로 해결이 안되는 부분에서는 strchr로

//strstr로 해결이 안되는 부분에서는 strchr로

//strstr로 해결이 안되는 부분에서는 strchr로

 

#include <stdio.h>

#include <string.h>

 

#define MAX_ROW 100

#define MAX_COL 100

 

static int extract_strchr(char *str, char tmp[100][100]);

 

int main(void)

{

char *str = "||||||sdfsfsfsdfdsf||||sdffsdfdsfdsfds||||||||||||dd|ff||||||";

char tmp[MAX_ROW][MAX_COL];

 

int rc,ii;

 

    memset(tmp,0x00,sizeof(tmp));

rc = extract_strchr(str, tmp);

 

for(ii=0; ii<rc; ii++)

{

printf("[%.4d](%s)\n", ii, tmp[ii]);

}

return(0);

}

 

int extract_strchr(char *str, char tmp[MAX_ROW][MAX_COL])

{

char *d1, *d2;

int kk=0;

 

d1 = strchr(str, '|');

memcpy(tmp[kk++], str, d1 - str);

 

    for(;;)

{

d2 = strchr(d1+1, '|');

if(d2==NULL) break;

memcpy(tmp[kk++], d1+1, d2-d1-1);

 

if(kk >= MAX_ROW) break;

 

d1 = strchr(d2+1, '|');

if(d1==NULL) break;

memcpy(tmp[kk++], d2+1, d1-d2-1);

 

if(kk >= MAX_ROW) break;

}

return(kk);

}

 

/*결과

bash-3.1$ gcc -c 40.c

bash-3.1$ gcc -o 40 40.o

bash-3.1$ 40

[0000]()

[0001]()

[0002]()

[0003]()

[0004]()

[0005]()

[0006](sdfsfsfsdfdsf)

[0007]()

[0008]()

[0009]()

[0010](sdffsdfdsfdsfds)

[0011]()

[0012]()

[0013]()

[0014]()

[0015]()

[0016]()

[0017]()

[0018]()

[0019]()

[0020]()

[0021]()

[0022](dd)

[0023](ff)

[0024]()

[0025]()

[0026]()

[0027]()

[0028]()

bash-3.1$

*/

//pointer memory use instead of structure stack memory

//pointer memory use instead of structure stack memory

//pointer memory use instead of structure stack memory

//pointer memory use instead of structure stack memory

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

#define MAX_ADDRESS_CNT 200

 

struct st_basic_trade

{

    char dataclass[2];

    char infoclass[2];

    char marketclass[1];

    char stockcode[12];

    char serialno[8];

    char abbrstockcode[9];

    char abbrstocknamekor[40];

    char abbrstocknameeng[40];

    char senddate[8];

    char infodivisiongroupno[5];

    char stockgroupid[2];

    char isunittrade[1];

    char exclasscode[2];

    char facevaluechangeclasscode[2];

    char isopenpricebasedstandardprice[1];

    char isrevaluationstockreason[2];

    char isstandardpricechangestock[1];

    char israndomendpossibillty[1];

    char ismarketalarmdangernotice[1];

    char marketalarmclasscode[2];

    char iscorporategovernancefine[1];

    char ismanagementstock[1];

    char isinsinceritypublicnewsappoint[1];

    char isbackdoorlisting[1];

    char istradestop[1];

    char indexbusinesstypelarge[3];

    char indexbusinesstypemedium[3];

    char indexbusinesstypesmall[3];

    char standardindustrycode[10];

    char businesstypekospi200[1];

    char listpricesizecode[1];

    char ismanufactureindustry[1];

    char iskrx100stock[1];

    char isdividendindexstock[1];

    char iscorporategovernanceindexstock[1];

    char investorganclasscode[2];

    char iskospi[1];

    char iskospi100[1];

    char iskospi50[1];

    char iskrxsectorindexcar[1];

    char iskrxsectorindexsemiconductor[1];

    char iskrxsectorindexbio[1];

    char iskrxsectorindexfinance[1];

    char iskrxsectorindexit[1];

    char iskrxsectorindexenergychemical[1];

    char iskrxsectorindexsteel[1];

    char iskrxsectorindexnecessary[1];

    char iskrxsectorindexmediacomm[1];

    char iskrxsectorindexconstruction[1];

    char iskrxsectorindexfinanceservice[1];

    char iskrxsectorindexstock[1];

    char iskrxsectorindexship[1];

    char standardprice[9];

    char ydayclosepriceclasscode[1];

    char ydaycloseprice[9];

    char ydayaccmvolume[12];

    char ydayaccmamount[18];

    char uplimitprice[9];

    char downlimitprice[9];

    char substituteprice[9];

    char facevalue[12];

};

 

int main(int argc, char *argv[])

{

    struct st_basic_trade st_basic_trade[MAX_ADDRESS_CNT];

 

struct st_basic_trade *address_byte_trade1;

struct st_basic_trade *address_byte_trade2;

struct st_basic_trade *address_byte_trade_tmp;

 

char *address_byte[MAX_ADDRESS_CNT];//st_basic_trade structure address saving pointer array

char *address_byte_tmp;//st_basic_trade structure address saving pointer

 

    FILE *fp=NULL;//file pointer

char rbuf[4096];//file read buffer

 

char tmp1[200];

char tmp2[200];

int ii,kk,continue_tmp;

int st_basic_trade_cnt;

 

if((fp=fopen("BATCH_A0011.dat", "rt"))==NULL)

{

return(-1);

}

 

    //DATA MEMORY INIT

//DATA MEMORY INIT

for(kk=0; kk<MAX_ADDRESS_CNT; kk++)

{

memset(&st_basic_trade[kk],0x00,sizeof(st_basic_trade[kk]));

}

 

    //DATA LOAD FROM FILE

//DATA LOAD FROM FILE

    kk=0;

while(1)

{

memset(rbuf,0x00,sizeof(rbuf));

if(fgets(rbuf,sizeof(rbuf),fp)==NULL) break;

 

memcpy(&st_basic_trade[kk], rbuf, (int)sizeof(st_basic_trade[kk]));

 

continue_tmp=-1;

 

if(memcmp(st_basic_trade[kk].stockgroupid,"ST",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"EF",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"RT",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"MF",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"SC",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"IF",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"DR",2)==0) continue_tmp=100;

        if(memcmp(st_basic_trade[kk].stockgroupid,"FS",2)==0) continue_tmp=100;

     if(memcmp(st_basic_trade[kk].stockgroupid,"EN",2)==0) continue_tmp=100;

 

if(continue_tmp<0) continue;

kk++;

 

if(kk==MAX_ADDRESS_CNT) break;

}

st_basic_trade_cnt=kk;

if(fp != NULL) fclose(fp);

 

//POINTER MEMORY USE INSTEAD OF STRUCTURE STACK MEMORY

//POINTER MEMORY USE INSTEAD OF STRUCTURE STACK MEMORY

for(kk=0; kk<st_basic_trade_cnt; kk++)

{

address_byte[kk] = (char *)&st_basic_trade[kk];

}

 

    //DESCENDING BY POINTER MEMORY

//DESCENDING BY POINTER MEMORY

for(kk=0; kk<st_basic_trade_cnt; kk++)

{

for(ii=kk+1; ii<st_basic_trade_cnt; ii++)

{

address_byte_trade1 = (struct st_basic_trade *)address_byte[kk];

address_byte_trade2 = (struct st_basic_trade *)address_byte[ii];

 

memset(tmp1,0x00,sizeof(tmp1));

memset(tmp2,0x00,sizeof(tmp2));

 

sprintf(tmp1, "%.*s", (int)sizeof(address_byte_trade1->standardprice), address_byte_trade1->standardprice);

sprintf(tmp2, "%.*s", (int)sizeof(address_byte_trade2->standardprice), address_byte_trade2->standardprice);

 

if(atoi(tmp1) > atoi(tmp2))

{

address_byte_tmp=address_byte[kk];

address_byte[kk]=address_byte[ii];

address_byte[ii]=address_byte_tmp;

}

}

}

 

//RESULT DISPLAY

//RESULT DISPLAY

for(kk=0; kk<st_basic_trade_cnt; kk++)

{

address_byte_trade_tmp = (struct st_basic_trade *)address_byte[kk];

 

printf(

    "[%.4d]:"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "(%.*s)"

    "\n"

kk+1,

(int)sizeof(address_byte_trade_tmp->iskospi),address_byte_trade_tmp->iskospi,

(int)sizeof(address_byte_trade_tmp->dataclass),address_byte_trade_tmp->dataclass,

(int)sizeof(address_byte_trade_tmp->infoclass),address_byte_trade_tmp->infoclass,

(int)sizeof(address_byte_trade_tmp->serialno),address_byte_trade_tmp->serialno,

(int)sizeof(address_byte_trade_tmp->stockgroupid),address_byte_trade_tmp->stockgroupid,

(int)sizeof(address_byte_trade_tmp->abbrstockcode),address_byte_trade_tmp->abbrstockcode,

(int)sizeof(address_byte_trade_tmp->standardprice),address_byte_trade_tmp->standardprice,

(int)sizeof(address_byte_trade_tmp->ydayaccmvolume),address_byte_trade_tmp->ydayaccmvolume,

(int)sizeof(address_byte_trade_tmp->ydayaccmamount),address_byte_trade_tmp->ydayaccmamount,

(int)sizeof(address_byte_trade_tmp->uplimitprice),address_byte_trade_tmp->uplimitprice,

(int)sizeof(address_byte_trade_tmp->downlimitprice),address_byte_trade_tmp->downlimitprice,

(int)sizeof(address_byte_trade_tmp->abbrstocknameeng),address_byte_trade_tmp->abbrstocknameeng);

}

return(0);

}

 

/*RESULT

[0140]:(Y)(A0)(01)(00000068)(ST)(A000860  )(000035500)(000000012109)(000000000427932950)(000046150)(000024850)(KANGNAM JEVISCO                         )

[0141]:(Y)(A0)(01)(00000069)(ST)(A000880  )(000035550)(000000250112)(000000008841239150)(000046200)(000024900)(Hanwha                                  )

[0142]:(Y)(A0)(01)(00000161)(ST)(A002390  )(000035800)(000000175128)(000000006200375550)(000046500)(000025100)(HANDOK                                  )

[0143]:(Y)(A0)(01)(00000062)(ST)(A000720  )(000036000)(000000935395)(000000033665525250)(000046800)(000025200)(HyundaiEng&Const                        )

[0144]:(Y)(A0)(01)(00000168)(ST)(A002620  )(000037150)(000000043866)(000000001645729300)(000048250)(000026050)(JeilPharm                               )

[0145]:(Y)(A0)(01)(00000031)(ST)(A000180  )(000038150)(000000051172)(000000001962002000)(000049550)(000026750)(SCEHoldings                             )

[0146]:(Y)(A0)(01)(00000080)(ST)(A001060  )(000040300)(000000157559)(000000006374627600)(000052300)(000028250)(JWPHARMA                                )

[0147]:(Y)(A0)(01)(00000082)(ST)(A001067  )(000042550)(000000000536)(000000000022519300)(000055300)(000029800)(JWPHARMA(2PB)                           )

[0148]:(Y)(A0)(01)(00000063)(ST)(A000725  )(000043150)(000000000564)(000000000024648550)(000056000)(000030250)(HyundaiEng&Con(1P)                      )

[0149]:(Y)(A0)(01)(00000039)(ST)(A000270  )(000043550)(000001342543)(000000058170323500)(000056600)(000030500)(KiaMtr                                  )

[0150]:(Y)(A0)(01)(00000147)(ST)(A002170  )(000044500)(000000010952)(000000000488631300)(000057800)(000031150)(SamyangTongsang                         )

[0151]:(Y)(A0)(01)(00000163)(ST)(A002420  )(000045400)(000000001276)(000000000057439100)(000059000)(000031800)(Century                                 )

[0152]:(Y)(A0)(01)(00000126)(ST)(A001745  )(000045750)(000000001253)(000000000058412550)(000059400)(000032050)(SKNetworks(1P)                          )

[0153]:(Y)(A0)(01)(00000124)(ST)(A001725  )(000046950)(000000000551)(000000000025664750)(000061000)(000032900)(ShinyoungSecu(1P)                       )

[0154]:(Y)(A0)(01)(00000123)(ST)(A001720  )(000049550)(000000002054)(000000000101791900)(000064400)(000034700)(ShinyoungSecu                           )

[0155]:(Y)(A0)(01)(00000030)(ST)(A000157  )(000050500)(000000000118)(000000000005902400)(000065600)(000035400)(DOOSAN(2PB)                             )

[0156]:(Y)(A0)(01)(00000067)(ST)(A000850  )(000050800)(000000001558)(000000000079929400)(000066000)(000035600)(HMT                                     )

[0157]:(Y)(A0)(01)(00000029)(ST)(A000155  )(000051000)(000000001053)(000000000053774400)(000066300)(000035700)(DOOSAN(1P)                              )

[0158]:(Y)(A0)(01)(00000192)(ST)(A003030  )(000051800)(000000009657)(000000000494291400)(000067300)(000036300)(SeAhStl                                 )

[0159]:(Y)(A0)(01)(00000073)(ST)(A000950  )(000053000)(000000001352)(000000000072137200)(000068900)(000037100)(Chonbang                                )

[0160]:(Y)(A0)(01)(00000156)(ST)(A002320  )(000053200)(000000053672)(000000002833688300)(000069100)(000037300)(HanjinTrnspt                            )

[0161]:(Y)(A0)(01)(00000196)(ST)(A003080  )(000055200)(000000000851)(000000000046476300)(000071700)(000038700)(SungboChem                              )

[0162]:(Y)(A0)(01)(00000083)(ST)(A001070  )(000056400)(000000001586)(000000000088415000)(000073300)(000039500)(TaihanTextl                             )

[0163]:(Y)(A0)(01)(00000137)(ST)(A001940  )(000058300)(000000002805)(000000000163564100)(000075700)(000040900)(KISCO Holdings                          )

[0164]:(Y)(A0)(01)(00000114)(ST)(A001530  )(000059200)(000000001443)(000000000085351600)(000076900)(000041500)(Dongil                                  )

[0165]:(Y)(A0)(01)(00000197)(ST)(A003090  )(000063200)(000000007172)(000000000457728500)(000082100)(000044300)(Daewoong                                )

[0166]:(Y)(A0)(01)(00000057)(ST)(A000650  )(000063600)(000000000824)(000000000053056100)(000082600)(000044600)(ChunilExp                               )

[0167]:(Y)(A0)(01)(00000140)(ST)(A002020  )(000070600)(000000044170)(000000003133398600)(000091700)(000049500)(KOLON CORP                              )

[0168]:(Y)(A0)(01)(00000028)(ST)(A000150  )(000072400)(000000117697)(000000008567840400)(000094100)(000050700)(DOOSAN                                  )

[0169]:(Y)(A0)(01)(00000055)(ST)(A000590  )(000072600)(000000001684)(000000000122223400)(000094300)(000050900)(CSHOLDINGS                              )

[0170]:(Y)(A0)(01)(00000032)(ST)(A000210  )(000077600)(000000148934)(000000011570941400)(000100500)(000054400)(DaelimInd                               )

[0171]:(Y)(A0)(01)(00000020)(ST)(A000075  )(000077800)(000000000177)(000000000013515400)(000101000)(000054500)(SAMYANGHOLDINGS(1P)                     )

[0172]:(Y)(A0)(01)(00000048)(ST)(A000480  )(000080600)(000000000412)(000000000033291100)(000104500)(000056500)(ChosunRefrctr                           )

[0173]:(Y)(A0)(01)(00000179)(ST)(A002795  )(000087500)(000000052984)(000000004654231400)(000113500)(000061300)(AmoreG(1P)                              )

[0174]:(Y)(A0)(01)(00000205)(ST)(A003300  )(000094800)(000000020468)(000000001954590400)(000123000)(000066400)(HanilCement                             )

[0175]:(Y)(A0)(01)(00000142)(ST)(A002030  )(000098300)(000000000761)(000000000074790600)(000127500)(000068900)(ASIA HOLDINGS                           )

[0176]:(Y)(A0)(01)(00000198)(ST)(A003120  )(000107500)(000000000483)(000000000051978500)(000139500)(000075500)(IlsungPharm                             )

[0177]:(Y)(A0)(01)(00000119)(ST)(A001630  )(000120000)(000000020708)(000000002442273500)(000156000)(000084000)(CHONGKUNDANG HOLDINGS                   )

[0178]:(Y)(A0)(01)(00000079)(ST)(A001045  )(000135000)(000000002881)(000000000387653500)(000175500)(000094500)(CJ(1P)                                  )

[0179]:(Y)(A0)(01)(00000200)(ST)(A003200  )(000148000)(000000001833)(000000000268996500)(000192000)(000104000)(IlshinSpng                              )

[0180]:(Y)(A0)(01)(00000178)(ST)(A002790  )(000161000)(000000715462)(000000113395522000)(000209000)(000113000)(AmoreG                                  )

[0181]:(Y)(A0)(01)(00000167)(ST)(A002600  )(000161000)(000000000169)(000000000027542500)(000209000)(000113000)(CHOHEUNG                                )

[0182]:(Y)(A0)(01)(00000019)(ST)(A000070  )(000177000)(000000028579)(000000005043584000)(000230000)(000124000)(SAMYANGHOLDINGS                         )

[0183]:(Y)(A0)(01)(00000182)(ST)(A002840  )(000179000)(000000000063)(000000000011328500)(000232500)(000125500)(MiwonComcl                              )

[0184]:(Y)(A0)(01)(00000086)(ST)(A001130  )(000184000)(000000000647)(000000000119095000)(000239000)(000129000)(DaehanFlrMill                           )

[0185]:(Y)(A0)(01)(00000024)(ST)(A000105  )(000190000)(000000000029)(000000000005484500)(000247000)(000133000)(Yuhan(1P)                               )

[0186]:(Y)(A0)(01)(00000066)(ST)(A000815  )(000195000)(000000003175)(000000000613795000)(000253500)(000136500)(SamsungF&MIns(1P)                       )

[0187]:(Y)(A0)(01)(00000105)(ST)(A001465  )(000198500)(000000000076)(000000000015081500)(000258000)(000139000)(BYC(1P)                                 )

[0188]:(Y)(A0)(01)(00000017)(ST)(A000050  )(000203000)(000000001581)(000000000318739000)(000263500)(000142500)(Kyungbang                               )

[0189]:(Y)(A0)(01)(00000056)(ST)(A000640  )(000214000)(000000013643)(000000002898145500)(000278000)(000150000)(Donga Socio Holdings                    )

[0190]:(Y)(A0)(01)(00000025)(ST)(A000120  )(000216000)(000000029404)(000000006392050500)(000280500)(000151500)(CJ korea express                        )

[0191]:(Y)(A0)(01)(00000078)(ST)(A001040  )(000281500)(000000039434)(000000011175365500)(000365500)(000197500)(CJ                                      )

[0192]:(Y)(A0)(01)(00000065)(ST)(A000810  )(000303500)(000000038064)(000000011500917820)(000394500)(000212500)(SamsungF&MIns                           )

[0193]:(Y)(A0)(01)(00000023)(ST)(A000100  )(000330000)(000000030710)(000000010129506500)(000429000)(000231000)(Yuhan                                   )

[0194]:(Y)(A0)(01)(00000160)(ST)(A002380  )(000432000)(000000014528)(000000006278496500)(000561000)(000302500)(KCC                                     )

[0195]:(Y)(A0)(01)(00000187)(ST)(A002960  )(000485000)(000000000772)(000000000378426000)(000630000)(000339500)(HankookShellOil                         )

[0196]:(Y)(A0)(01)(00000104)(ST)(A001460  )(000532000)(000000000326)(000000000172720000)(000691000)(000373000)(BYC                                     )

[0197]:(Y)(A0)(01)(00000059)(ST)(A000670  )(000931000)(000000001930)(000000001790511000)(001210000)(000652000)(Youngpoong                              )

[0198]:(Y)(A0)(01)(00000153)(ST)(A002270  )(000943000)(000000003189)(000000002984664000)(001225000)(000661000)(LotteFood                               )

[0199]:(Y)(A0)(01)(00000203)(ST)(A003240  )(000986000)(000000000664)(000000000656189000)(001281000)(000691000)(TaekwangInd                             )

[0200]:(Y)(A0)(01)(00000134)(ST)(A001800  )(001028000)(000000010402)(000000010702212000)(001336000)(000720000)(ORION                                   )

bash-3.1$

*/

#include <stdio.h>

#include <string.h>

 

typedef struct ____HM

{

int hh;

int mm;

}HM;

 

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

//시간(HH:MM)10:00에서 unit(MINUTE)만큼 뺄때에 구해지는 HH:MM을 계산

void ____get_hour_min(HM *sihm, int unit)

{

   int divide_hh, divide_mm, share;

 

   divide_hh = (int)(unit / 60);

   divide_mm = unit - (int)(unit / 60) * 60;

   if(divide_mm > 0) share = 1;

   else share = 0;

 

   sihm->hh = 10 - divide_hh - share;

 

   if(share==1) sihm->mm = 60 - divide_mm;

   else sihm->mm = divide_mm;

}

 

int main(int argc, char *argv[])

{

HM sihm;

    int kk;

 

    //10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

//10:00에서 61분에서 300분까지를 빼서 나오는결과를 출력

for(kk=61; kk<300; kk++)

{

____get_hour_min( &sihm, kk);

 

printf("MINUTE(%.6d),sihm.hh(%d),sihm.mm(%d)=HH:MM(%02d:%02d)\n", kk, sihm.hh, sihm.mm, sihm.hh, sihm.mm);

}

return(0);

}

 

/*

bash-3.1$ gcc -c 61.c

bash-3.1$

bash-3.1$

bash-3.1$

bash-3.1$ gcc -o 61 61.o

bash-3.1$

bash-3.1$

bash-3.1$

bash-3.1$ 61

MINUTE(000061),sihm.hh(08),sihm.mm(59)=HH:MM(08:59)

MINUTE(000062),sihm.hh(08),sihm.mm(58)=HH:MM(08:58)

MINUTE(000063),sihm.hh(08),sihm.mm(57)=HH:MM(08:57)

MINUTE(000064),sihm.hh(08),sihm.mm(56)=HH:MM(08:56)

MINUTE(000065),sihm.hh(08),sihm.mm(55)=HH:MM(08:55)

MINUTE(000066),sihm.hh(08),sihm.mm(54)=HH:MM(08:54)

MINUTE(000067),sihm.hh(08),sihm.mm(53)=HH:MM(08:53)

MINUTE(000068),sihm.hh(08),sihm.mm(52)=HH:MM(08:52)

MINUTE(000069),sihm.hh(08),sihm.mm(51)=HH:MM(08:51)

MINUTE(000070),sihm.hh(08),sihm.mm(50)=HH:MM(08:50)

MINUTE(000071),sihm.hh(08),sihm.mm(49)=HH:MM(08:49)

MINUTE(000072),sihm.hh(08),sihm.mm(48)=HH:MM(08:48)

MINUTE(000073),sihm.hh(08),sihm.mm(47)=HH:MM(08:47)

MINUTE(000074),sihm.hh(08),sihm.mm(46)=HH:MM(08:46)

MINUTE(000075),sihm.hh(08),sihm.mm(45)=HH:MM(08:45)

MINUTE(000076),sihm.hh(08),sihm.mm(44)=HH:MM(08:44)

MINUTE(000077),sihm.hh(08),sihm.mm(43)=HH:MM(08:43)

MINUTE(000078),sihm.hh(08),sihm.mm(42)=HH:MM(08:42)

MINUTE(000079),sihm.hh(08),sihm.mm(41)=HH:MM(08:41)

MINUTE(000080),sihm.hh(08),sihm.mm(40)=HH:MM(08:40)

MINUTE(000081),sihm.hh(08),sihm.mm(39)=HH:MM(08:39)

MINUTE(000082),sihm.hh(08),sihm.mm(38)=HH:MM(08:38)

MINUTE(000083),sihm.hh(08),sihm.mm(37)=HH:MM(08:37)

MINUTE(000084),sihm.hh(08),sihm.mm(36)=HH:MM(08:36)

MINUTE(000085),sihm.hh(08),sihm.mm(35)=HH:MM(08:35)

MINUTE(000086),sihm.hh(08),sihm.mm(34)=HH:MM(08:34)

MINUTE(000087),sihm.hh(08),sihm.mm(33)=HH:MM(08:33)

MINUTE(000088),sihm.hh(08),sihm.mm(32)=HH:MM(08:32)

MINUTE(000089),sihm.hh(08),sihm.mm(31)=HH:MM(08:31)

MINUTE(000090),sihm.hh(08),sihm.mm(30)=HH:MM(08:30)

MINUTE(000091),sihm.hh(08),sihm.mm(29)=HH:MM(08:29)

MINUTE(000092),sihm.hh(08),sihm.mm(28)=HH:MM(08:28)

MINUTE(000093),sihm.hh(08),sihm.mm(27)=HH:MM(08:27)

MINUTE(000094),sihm.hh(08),sihm.mm(26)=HH:MM(08:26)

MINUTE(000095),sihm.hh(08),sihm.mm(25)=HH:MM(08:25)

MINUTE(000096),sihm.hh(08),sihm.mm(24)=HH:MM(08:24)

MINUTE(000097),sihm.hh(08),sihm.mm(23)=HH:MM(08:23)

MINUTE(000098),sihm.hh(08),sihm.mm(22)=HH:MM(08:22)

MINUTE(000099),sihm.hh(08),sihm.mm(21)=HH:MM(08:21)

MINUTE(000100),sihm.hh(08),sihm.mm(20)=HH:MM(08:20)

MINUTE(000101),sihm.hh(08),sihm.mm(19)=HH:MM(08:19)

MINUTE(000102),sihm.hh(08),sihm.mm(18)=HH:MM(08:18)

MINUTE(000103),sihm.hh(08),sihm.mm(17)=HH:MM(08:17)

MINUTE(000104),sihm.hh(08),sihm.mm(16)=HH:MM(08:16)

MINUTE(000105),sihm.hh(08),sihm.mm(15)=HH:MM(08:15)

MINUTE(000106),sihm.hh(08),sihm.mm(14)=HH:MM(08:14)

MINUTE(000107),sihm.hh(08),sihm.mm(13)=HH:MM(08:13)

MINUTE(000108),sihm.hh(08),sihm.mm(12)=HH:MM(08:12)

MINUTE(000109),sihm.hh(08),sihm.mm(11)=HH:MM(08:11)

MINUTE(000110),sihm.hh(08),sihm.mm(10)=HH:MM(08:10)

MINUTE(000111),sihm.hh(08),sihm.mm(09)=HH:MM(08:09)

MINUTE(000112),sihm.hh(08),sihm.mm(08)=HH:MM(08:08)

MINUTE(000113),sihm.hh(08),sihm.mm(07)=HH:MM(08:07)

MINUTE(000114),sihm.hh(08),sihm.mm(06)=HH:MM(08:06)

MINUTE(000115),sihm.hh(08),sihm.mm(05)=HH:MM(08:05)

MINUTE(000116),sihm.hh(08),sihm.mm(04)=HH:MM(08:04)

MINUTE(000117),sihm.hh(08),sihm.mm(03)=HH:MM(08:03)

MINUTE(000118),sihm.hh(08),sihm.mm(02)=HH:MM(08:02)

MINUTE(000119),sihm.hh(08),sihm.mm(01)=HH:MM(08:01)

MINUTE(000120),sihm.hh(08),sihm.mm(00)=HH:MM(08:00)

MINUTE(000121),sihm.hh(07),sihm.mm(59)=HH:MM(07:59)

MINUTE(000122),sihm.hh(07),sihm.mm(58)=HH:MM(07:58)

MINUTE(000123),sihm.hh(07),sihm.mm(57)=HH:MM(07:57)

MINUTE(000124),sihm.hh(07),sihm.mm(56)=HH:MM(07:56)

MINUTE(000125),sihm.hh(07),sihm.mm(55)=HH:MM(07:55)

MINUTE(000126),sihm.hh(07),sihm.mm(54)=HH:MM(07:54)

MINUTE(000127),sihm.hh(07),sihm.mm(53)=HH:MM(07:53)

MINUTE(000128),sihm.hh(07),sihm.mm(52)=HH:MM(07:52)

MINUTE(000129),sihm.hh(07),sihm.mm(51)=HH:MM(07:51)

MINUTE(000130),sihm.hh(07),sihm.mm(50)=HH:MM(07:50)

MINUTE(000131),sihm.hh(07),sihm.mm(49)=HH:MM(07:49)

MINUTE(000132),sihm.hh(07),sihm.mm(48)=HH:MM(07:48)

MINUTE(000133),sihm.hh(07),sihm.mm(47)=HH:MM(07:47)

MINUTE(000134),sihm.hh(07),sihm.mm(46)=HH:MM(07:46)

MINUTE(000135),sihm.hh(07),sihm.mm(45)=HH:MM(07:45)

MINUTE(000136),sihm.hh(07),sihm.mm(44)=HH:MM(07:44)

MINUTE(000137),sihm.hh(07),sihm.mm(43)=HH:MM(07:43)

MINUTE(000138),sihm.hh(07),sihm.mm(42)=HH:MM(07:42)

MINUTE(000139),sihm.hh(07),sihm.mm(41)=HH:MM(07:41)

MINUTE(000140),sihm.hh(07),sihm.mm(40)=HH:MM(07:40)

MINUTE(000141),sihm.hh(07),sihm.mm(39)=HH:MM(07:39)

MINUTE(000142),sihm.hh(07),sihm.mm(38)=HH:MM(07:38)

MINUTE(000143),sihm.hh(07),sihm.mm(37)=HH:MM(07:37)

MINUTE(000144),sihm.hh(07),sihm.mm(36)=HH:MM(07:36)

MINUTE(000145),sihm.hh(07),sihm.mm(35)=HH:MM(07:35)

MINUTE(000146),sihm.hh(07),sihm.mm(34)=HH:MM(07:34)

MINUTE(000147),sihm.hh(07),sihm.mm(33)=HH:MM(07:33)

MINUTE(000148),sihm.hh(07),sihm.mm(32)=HH:MM(07:32)

MINUTE(000149),sihm.hh(07),sihm.mm(31)=HH:MM(07:31)

MINUTE(000150),sihm.hh(07),sihm.mm(30)=HH:MM(07:30)

MINUTE(000151),sihm.hh(07),sihm.mm(29)=HH:MM(07:29)

MINUTE(000152),sihm.hh(07),sihm.mm(28)=HH:MM(07:28)

MINUTE(000153),sihm.hh(07),sihm.mm(27)=HH:MM(07:27)

MINUTE(000154),sihm.hh(07),sihm.mm(26)=HH:MM(07:26)

MINUTE(000155),sihm.hh(07),sihm.mm(25)=HH:MM(07:25)

MINUTE(000156),sihm.hh(07),sihm.mm(24)=HH:MM(07:24)

MINUTE(000157),sihm.hh(07),sihm.mm(23)=HH:MM(07:23)

MINUTE(000158),sihm.hh(07),sihm.mm(22)=HH:MM(07:22)

MINUTE(000159),sihm.hh(07),sihm.mm(21)=HH:MM(07:21)

MINUTE(000160),sihm.hh(07),sihm.mm(20)=HH:MM(07:20)

MINUTE(000161),sihm.hh(07),sihm.mm(19)=HH:MM(07:19)

MINUTE(000162),sihm.hh(07),sihm.mm(18)=HH:MM(07:18)

MINUTE(000163),sihm.hh(07),sihm.mm(17)=HH:MM(07:17)

MINUTE(000164),sihm.hh(07),sihm.mm(16)=HH:MM(07:16)

MINUTE(000165),sihm.hh(07),sihm.mm(15)=HH:MM(07:15)

MINUTE(000166),sihm.hh(07),sihm.mm(14)=HH:MM(07:14)

MINUTE(000167),sihm.hh(07),sihm.mm(13)=HH:MM(07:13)

MINUTE(000168),sihm.hh(07),sihm.mm(12)=HH:MM(07:12)

MINUTE(000169),sihm.hh(07),sihm.mm(11)=HH:MM(07:11)

MINUTE(000170),sihm.hh(07),sihm.mm(10)=HH:MM(07:10)

MINUTE(000171),sihm.hh(07),sihm.mm(09)=HH:MM(07:09)

MINUTE(000172),sihm.hh(07),sihm.mm(08)=HH:MM(07:08)

MINUTE(000173),sihm.hh(07),sihm.mm(07)=HH:MM(07:07)

MINUTE(000174),sihm.hh(07),sihm.mm(06)=HH:MM(07:06)

MINUTE(000175),sihm.hh(07),sihm.mm(05)=HH:MM(07:05)

MINUTE(000176),sihm.hh(07),sihm.mm(04)=HH:MM(07:04)

MINUTE(000177),sihm.hh(07),sihm.mm(03)=HH:MM(07:03)

MINUTE(000178),sihm.hh(07),sihm.mm(02)=HH:MM(07:02)

MINUTE(000179),sihm.hh(07),sihm.mm(01)=HH:MM(07:01)

MINUTE(000180),sihm.hh(07),sihm.mm(00)=HH:MM(07:00)

MINUTE(000181),sihm.hh(06),sihm.mm(59)=HH:MM(06:59)

MINUTE(000182),sihm.hh(06),sihm.mm(58)=HH:MM(06:58)

MINUTE(000183),sihm.hh(06),sihm.mm(57)=HH:MM(06:57)

MINUTE(000184),sihm.hh(06),sihm.mm(56)=HH:MM(06:56)

MINUTE(000185),sihm.hh(06),sihm.mm(55)=HH:MM(06:55)

MINUTE(000186),sihm.hh(06),sihm.mm(54)=HH:MM(06:54)

MINUTE(000187),sihm.hh(06),sihm.mm(53)=HH:MM(06:53)

MINUTE(000188),sihm.hh(06),sihm.mm(52)=HH:MM(06:52)

MINUTE(000189),sihm.hh(06),sihm.mm(51)=HH:MM(06:51)

MINUTE(000190),sihm.hh(06),sihm.mm(50)=HH:MM(06:50)

MINUTE(000191),sihm.hh(06),sihm.mm(49)=HH:MM(06:49)

MINUTE(000192),sihm.hh(06),sihm.mm(48)=HH:MM(06:48)

MINUTE(000193),sihm.hh(06),sihm.mm(47)=HH:MM(06:47)

MINUTE(000194),sihm.hh(06),sihm.mm(46)=HH:MM(06:46)

MINUTE(000195),sihm.hh(06),sihm.mm(45)=HH:MM(06:45)

MINUTE(000196),sihm.hh(06),sihm.mm(44)=HH:MM(06:44)

MINUTE(000197),sihm.hh(06),sihm.mm(43)=HH:MM(06:43)

MINUTE(000198),sihm.hh(06),sihm.mm(42)=HH:MM(06:42)

MINUTE(000199),sihm.hh(06),sihm.mm(41)=HH:MM(06:41)

MINUTE(000200),sihm.hh(06),sihm.mm(40)=HH:MM(06:40)

MINUTE(000201),sihm.hh(06),sihm.mm(39)=HH:MM(06:39)

MINUTE(000202),sihm.hh(06),sihm.mm(38)=HH:MM(06:38)

MINUTE(000203),sihm.hh(06),sihm.mm(37)=HH:MM(06:37)

MINUTE(000204),sihm.hh(06),sihm.mm(36)=HH:MM(06:36)

MINUTE(000205),sihm.hh(06),sihm.mm(35)=HH:MM(06:35)

MINUTE(000206),sihm.hh(06),sihm.mm(34)=HH:MM(06:34)

MINUTE(000207),sihm.hh(06),sihm.mm(33)=HH:MM(06:33)

MINUTE(000208),sihm.hh(06),sihm.mm(32)=HH:MM(06:32)

MINUTE(000209),sihm.hh(06),sihm.mm(31)=HH:MM(06:31)

MINUTE(000210),sihm.hh(06),sihm.mm(30)=HH:MM(06:30)

MINUTE(000211),sihm.hh(06),sihm.mm(29)=HH:MM(06:29)

MINUTE(000212),sihm.hh(06),sihm.mm(28)=HH:MM(06:28)

MINUTE(000213),sihm.hh(06),sihm.mm(27)=HH:MM(06:27)

MINUTE(000214),sihm.hh(06),sihm.mm(26)=HH:MM(06:26)

MINUTE(000215),sihm.hh(06),sihm.mm(25)=HH:MM(06:25)

MINUTE(000216),sihm.hh(06),sihm.mm(24)=HH:MM(06:24)

MINUTE(000217),sihm.hh(06),sihm.mm(23)=HH:MM(06:23)

MINUTE(000218),sihm.hh(06),sihm.mm(22)=HH:MM(06:22)

MINUTE(000219),sihm.hh(06),sihm.mm(21)=HH:MM(06:21)

MINUTE(000220),sihm.hh(06),sihm.mm(20)=HH:MM(06:20)

MINUTE(000221),sihm.hh(06),sihm.mm(19)=HH:MM(06:19)

MINUTE(000222),sihm.hh(06),sihm.mm(18)=HH:MM(06:18)

MINUTE(000223),sihm.hh(06),sihm.mm(17)=HH:MM(06:17)

MINUTE(000224),sihm.hh(06),sihm.mm(16)=HH:MM(06:16)

MINUTE(000225),sihm.hh(06),sihm.mm(15)=HH:MM(06:15)

MINUTE(000226),sihm.hh(06),sihm.mm(14)=HH:MM(06:14)

MINUTE(000227),sihm.hh(06),sihm.mm(13)=HH:MM(06:13)

MINUTE(000228),sihm.hh(06),sihm.mm(12)=HH:MM(06:12)

MINUTE(000229),sihm.hh(06),sihm.mm(11)=HH:MM(06:11)

MINUTE(000230),sihm.hh(06),sihm.mm(10)=HH:MM(06:10)

MINUTE(000231),sihm.hh(06),sihm.mm(09)=HH:MM(06:09)

MINUTE(000232),sihm.hh(06),sihm.mm(08)=HH:MM(06:08)

MINUTE(000233),sihm.hh(06),sihm.mm(07)=HH:MM(06:07)

MINUTE(000234),sihm.hh(06),sihm.mm(06)=HH:MM(06:06)

MINUTE(000235),sihm.hh(06),sihm.mm(05)=HH:MM(06:05)

MINUTE(000236),sihm.hh(06),sihm.mm(04)=HH:MM(06:04)

MINUTE(000237),sihm.hh(06),sihm.mm(03)=HH:MM(06:03)

MINUTE(000238),sihm.hh(06),sihm.mm(02)=HH:MM(06:02)

MINUTE(000239),sihm.hh(06),sihm.mm(01)=HH:MM(06:01)

MINUTE(000240),sihm.hh(06),sihm.mm(00)=HH:MM(06:00)

MINUTE(000241),sihm.hh(05),sihm.mm(59)=HH:MM(05:59)

MINUTE(000242),sihm.hh(05),sihm.mm(58)=HH:MM(05:58)

MINUTE(000243),sihm.hh(05),sihm.mm(57)=HH:MM(05:57)

MINUTE(000244),sihm.hh(05),sihm.mm(56)=HH:MM(05:56)

MINUTE(000245),sihm.hh(05),sihm.mm(55)=HH:MM(05:55)

MINUTE(000246),sihm.hh(05),sihm.mm(54)=HH:MM(05:54)

MINUTE(000247),sihm.hh(05),sihm.mm(53)=HH:MM(05:53)

MINUTE(000248),sihm.hh(05),sihm.mm(52)=HH:MM(05:52)

MINUTE(000249),sihm.hh(05),sihm.mm(51)=HH:MM(05:51)

MINUTE(000250),sihm.hh(05),sihm.mm(50)=HH:MM(05:50)

MINUTE(000251),sihm.hh(05),sihm.mm(49)=HH:MM(05:49)

MINUTE(000252),sihm.hh(05),sihm.mm(48)=HH:MM(05:48)

MINUTE(000253),sihm.hh(05),sihm.mm(47)=HH:MM(05:47)

MINUTE(000254),sihm.hh(05),sihm.mm(46)=HH:MM(05:46)

MINUTE(000255),sihm.hh(05),sihm.mm(45)=HH:MM(05:45)

MINUTE(000256),sihm.hh(05),sihm.mm(44)=HH:MM(05:44)

MINUTE(000257),sihm.hh(05),sihm.mm(43)=HH:MM(05:43)

MINUTE(000258),sihm.hh(05),sihm.mm(42)=HH:MM(05:42)

MINUTE(000259),sihm.hh(05),sihm.mm(41)=HH:MM(05:41)

MINUTE(000260),sihm.hh(05),sihm.mm(40)=HH:MM(05:40)

MINUTE(000261),sihm.hh(05),sihm.mm(39)=HH:MM(05:39)

MINUTE(000262),sihm.hh(05),sihm.mm(38)=HH:MM(05:38)

MINUTE(000263),sihm.hh(05),sihm.mm(37)=HH:MM(05:37)

MINUTE(000264),sihm.hh(05),sihm.mm(36)=HH:MM(05:36)

MINUTE(000265),sihm.hh(05),sihm.mm(35)=HH:MM(05:35)

MINUTE(000266),sihm.hh(05),sihm.mm(34)=HH:MM(05:34)

MINUTE(000267),sihm.hh(05),sihm.mm(33)=HH:MM(05:33)

MINUTE(000268),sihm.hh(05),sihm.mm(32)=HH:MM(05:32)

MINUTE(000269),sihm.hh(05),sihm.mm(31)=HH:MM(05:31)

MINUTE(000270),sihm.hh(05),sihm.mm(30)=HH:MM(05:30)

MINUTE(000271),sihm.hh(05),sihm.mm(29)=HH:MM(05:29)

MINUTE(000272),sihm.hh(05),sihm.mm(28)=HH:MM(05:28)

MINUTE(000273),sihm.hh(05),sihm.mm(27)=HH:MM(05:27)

MINUTE(000274),sihm.hh(05),sihm.mm(26)=HH:MM(05:26)

MINUTE(000275),sihm.hh(05),sihm.mm(25)=HH:MM(05:25)

MINUTE(000276),sihm.hh(05),sihm.mm(24)=HH:MM(05:24)

MINUTE(000277),sihm.hh(05),sihm.mm(23)=HH:MM(05:23)

MINUTE(000278),sihm.hh(05),sihm.mm(22)=HH:MM(05:22)

MINUTE(000279),sihm.hh(05),sihm.mm(21)=HH:MM(05:21)

MINUTE(000280),sihm.hh(05),sihm.mm(20)=HH:MM(05:20)

MINUTE(000281),sihm.hh(05),sihm.mm(19)=HH:MM(05:19)

MINUTE(000282),sihm.hh(05),sihm.mm(18)=HH:MM(05:18)

MINUTE(000283),sihm.hh(05),sihm.mm(17)=HH:MM(05:17)

MINUTE(000284),sihm.hh(05),sihm.mm(16)=HH:MM(05:16)

MINUTE(000285),sihm.hh(05),sihm.mm(15)=HH:MM(05:15)

MINUTE(000286),sihm.hh(05),sihm.mm(14)=HH:MM(05:14)

MINUTE(000287),sihm.hh(05),sihm.mm(13)=HH:MM(05:13)

MINUTE(000288),sihm.hh(05),sihm.mm(12)=HH:MM(05:12)

MINUTE(000289),sihm.hh(05),sihm.mm(11)=HH:MM(05:11)

MINUTE(000290),sihm.hh(05),sihm.mm(10)=HH:MM(05:10)

MINUTE(000291),sihm.hh(05),sihm.mm(09)=HH:MM(05:09)

MINUTE(000292),sihm.hh(05),sihm.mm(08)=HH:MM(05:08)

MINUTE(000293),sihm.hh(05),sihm.mm(07)=HH:MM(05:07)

MINUTE(000294),sihm.hh(05),sihm.mm(06)=HH:MM(05:06)

MINUTE(000295),sihm.hh(05),sihm.mm(05)=HH:MM(05:05)

MINUTE(000296),sihm.hh(05),sihm.mm(04)=HH:MM(05:04)

MINUTE(000297),sihm.hh(05),sihm.mm(03)=HH:MM(05:03)

MINUTE(000298),sihm.hh(05),sihm.mm(02)=HH:MM(05:02)

MINUTE(000299),sihm.hh(05),sihm.mm(01)=HH:MM(05:01)

bash-3.1$

bash-3.1$

bash-3.1$

*/

gcc -o sample sample.o -lm 시에 m의 의미는?

 

라이브러리파일을 찾기위한 하나의 INDEX 문자열이다.

 

#include <math.h> 는 헤더이고, 오브젝트는 libm.a입니다.

여기에서, lib와 .a사이에 문자열스트링을 가지고 LINK시에 파일을 참조해서 LINK합니다.

 

예를 들어 다음과 같은 함수의 프로토타입은 math.h에 선언되어져 있어서 compile시에 성공적으로 수행되지만,

실제 LINK에는 라이브러리 파일의 오브젝트를 참조하기때문에 헤더와 라이브러리 오브젝트는 분리되어 있습니다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡsin함수의 프로토타입(math.h에 선언되어져 있습니다.)ㅡㅡㅡㅡㅡㅡ

double sin(double x); sine 계산

float sinf(float x); sine 계산

long double sinl(long double x); sine 계산 

 

입력 매개 변수 리스트 : x radian

반환 값 : sine 값

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

sin함수의 구현은 libm.a에 바이너리형태로 구현되어 있습니다.

(오브젝트파일 -> 아카이브파일로 묶여있음)

 

bash-3.1$

bash-3.1$ find ./ -name libm.*

find: `./Documents and Settings': Permission denied

./MinGW/lib/libm.a (반드시 LINK할 디렉토리는 Makefile PATH에 설정되어 있어야 합니다.

find: `./Program Files/Windows NT/\272\270\301\266\307\301\267\316\261\327\267\245': Permission denied

find: File system loop detected; `./ProgramData/Application Data' is part of the same file system loop as `./ProgramData'.

find: `./ProgramData/Desktop': Permission denied

find: `./ProgramData/Documents': Permission denied

find: `./ProgramData/Favorites': Permission denied

find: `./ProgramData/Microsoft/Diagnosis/SoftLanding': Permission denied

find: `./ProgramData/Microsoft/Diagnosis/SoftLandingStage': Permission denied

find: `./ProgramData/Microsoft/Windows/Start Menu/\307\301\267\316\261\327\267\245': Permission denied

find: `./ProgramData/Start Menu': Permission denied

find: `./ProgramData/Templates': Permission denied

find: `./ProgramData/\271\331\305\301 \310\255\270\351': Permission denied

find: `./ProgramData/\275\303\300\333 \270\336\264\272': Permission denied

find: `./System Volume Information': Permission denied

find: File system loop detected; `./Users/All Users/Application Data' is part of the same file system loop as `./Users/All Users'.

find: `./Users/All Users/Desktop': Permission denied

find: `./Users/All Users/Documents': Permission denied

find: `./Users/All Users/Favorites': Permission denied

find: `./Users/All Users/Microsoft/Diagnosis/SoftLanding': Permission denied

find: `./Users/All Users/Microsoft/Diagnosis/SoftLandingStage': Permission denied

find: `./Users/All Users/Microsoft/Windows/Start Menu/\307\301\267\316\261\327\267\245': Permission denied

find: `./Users/All Users/Start Menu': Permission denied

find: `./Users/All Users/Templates': Permission denied

find: `./Users/All Users/\271\331\305\301 \310\255\270\351': Permission denied

find: `./Users/All Users/\275\303\300\333 \270\336\264\272': Permission denied

find: File system loop detected; `./Users/Default/AppData/Local/Application Data' is part of the same file system loop as `./Users/Default/AppData/Local'.

find: `./Users/Default/AppData/Local/History': Permission denied

find: `./Users/Default/AppData/Local/Temporary Internet Files': Permission denied

find: `./Users/Default/AppData/Roaming/Microsoft/Windows/Start Menu/\307\301\267\316\261\327\267\245': Permission denied

find: `./Users/Default/Application Data': Permission denied

find: `./Users/Default/Cookies': Permission denied

find: `./Users/Default/Documents/My Music': Permission denied

find: `./Users/Default/Documents/My Pictures': Permission denied

find: `./Users/Default/Documents/My Videos': Permission denied

find: `./Users/Default/Local Settings': Permission denied

find: `./Users/Default/My Documents': Permission denied

find: `./Users/Default/NetHood': Permission denied

find: `./Users/Default/PrintHood': Permission denied

find: `./Users/Default/Recent': Permission denied

find: `./Users/Default/SendTo': Permission denied

find: `./Users/Default/Start Menu': Permission denied

find: `./Users/Default/Templates': Permission denied

find: `./Users/Default/\275\303\300\333 \270\336\264\272': Permission denied

find: `./Users/Default User': Permission denied

find: `./Users/Public/Documents/My Music': Permission denied

find: `./Users/Public/Documents/My Pictures': Permission denied

find: `./Users/Public/Documents/My Videos': Permission denied

find: `./Windows/CSC/v2.0.6': Permission denied

[Tip] semop() 세마포어 값을 변경

 

--------------------------------------------------------------------------------------------------------------------------

설명

--------------------------------------------------------------------------------------------------------------------------

semop() 함수는 세마포어의 값을 변경합니다. 세마포어를 사용하기 위해서는 

먼저 세마포어 값을 1 감소시키고, 사용 후에는 1 증가시키는데, 이렇게 세마포어값을 증감하는 것을 요청하는 함수입니다.

 

--------------------------------------------------------------------------------------------------------------------------

헤더

--------------------------------------------------------------------------------------------------------------------------

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

 

--------------------------------------------------------------------------------------------------------------------------

형태

--------------------------------------------------------------------------------------------------------------------------

int semop ( int semid, struct sembuf *sops, unsigned nsops )

 

--------------------------------------------------------------------------------------------------------------------------

인수

--------------------------------------------------------------------------------------------------------------------------

int semid 시스템에서 세머포어를 식별하는 집합 번호

struct sembuf *sops

세마포어 값을 계사하기위한 설정 값

struct sembuf {

    short sem_num;   세마포어 번호

    short sem_op;     세마포어 증감값

    short sem_flg;     옵션

}

 

sem_flg sem_flg 내용

IPC_NOWAIT

호출 즉시 실행하지 못했을 경우 기다리지 않고 실패로 바로 복귀합니다.

 

SEM_UNDO 프로세스가 종료되면 시스템에서 세마포어 설저을 원래 상태로 되돌립니다. 그러므로 보통 이 옵션을 사용합니다.

unsigned nsops

변경하려는 세마포어 개수로 변경하려는 세마포어 개수가 여러 개일 때 사용합니다.

예를 들어 변경하려는 세마포어 개수가 한 개라면

 

struct sembuf sbuf = { 0, -1, 0};

semop( semmop, &sbuf, 1);

 

이렇게 값이 1이 되지만 한번에 2개 이상의 세마포어를 변경한다면,

 

struct sembuf pbuf[2]   = {

      { 0,  1, 0} ,   // 첫번째 세마포어 값을 1 증가

      { 1, -1, 0}     // 두번째 세마포어 값을 1 감소

    }

semop( semmop, pbuf, 2);

 

--------------------------------------------------------------------------------------------------------------------------

반환

--------------------------------------------------------------------------------------------------------------------------

0 성공

-1 실패

 

--------------------------------------------------------------------------------------------------------------------------

예제

--------------------------------------------------------------------------------------------------------------------------

예제에서는 두개의 쓰레드를 만들어 첫번째 쓰레드는 카운터 값을 증가 시키고 두번째 쓰레드는 카운터를 화면에 출력합니다. 

카운터가 5 이상의 값이 되면 두 개의 쓰레드는 모두 종료하고 프로그램이 종료되면서 세마포어를 삭제합니다.

여기서 세마포어는 각각의 쓰레드가 독립적으로 실행될수 있음을 보장하는 역할을 수행한다.

 

#include <pthread.h>

#include <stdlib.h>

#include <unistd.h>

#include <stdio.h>

#include <sys/ipc.h>

#include <sys/sem.h>

 

int         cnt   = 0;

static int  semid;

 

void p()

{

   struct sembuf pbuf;

 

   pbuf.sem_num   = 0;

   pbuf.sem_op    = -1;

   pbuf.sem_flg   = SEM_UNDO;

 

   if ( -1 == semop(semid, &pbuf, 1))

      printf( "p()-semop() 실행 오류\n");

}

 

void v()

{

   struct sembuf vbuf;

 

   vbuf.sem_num   = 0;

   vbuf.sem_op    = 1;

   vbuf.sem_flg   = SEM_UNDO;

 

   if ( -1 == semop( semid, &vbuf, 1))

      printf( "v()-semop() 실행 오류\n");

}

 

void *fun_thread1(void *arg)

{

   while( 1)

   {

      p();

      printf( "thread1 실행\n");

      if ( 5 < cnt)

      {

         printf( "thread1 완전 종료\n");

         v();

         break;

      }

      else

      {

         cnt++;

         usleep( 100);

         printf( "thread1 완료\n");

      }

      v();

   }

   return NULL;

}

 

void *fun_thread2(void *arg)

{

   while( 1)

   {

      p();

      printf( "thread2 실행\n");

      if ( 5 < cnt)

      {

         printf( "thread2 완전 종료\n");

         v();

         break;

      }

      else

      {

         printf( "카운터= %d\n", cnt);

         usleep( 100);

         printf( "thread2 완료\n");

      }

      v();

   }

 

   return NULL;

}

 

int main(int argc, char *argv[])

{

   pthread_t thread1;

   pthread_t thread2;

   union semun{

      int                  val;

      struct   semid_ds   *buf;

      unsigned short int  *arrary;

   }  arg;

 

   if ( -1 == (semid = semget( IPC_PRIVATE, 1, IPC_CREAT | 0666)))

   {

      printf( "semget() 실행 오류\n");

      return -1;

   }

 

   arg.val  =  1;                // 세마포어 값을 1로 설정

   if ( -1 == semctl(semid, 0, SETVAL, arg))

   {

      printf( "semctl()-SETVAL 실행 오류\n");

      return -1;

   }

 

   pthread_create(&thread1, NULL, fun_thread1, NULL);

   pthread_create(&thread2, NULL, fun_thread2, NULL);

   pthread_join( thread1, NULL);

   pthread_join( thread2, NULL);

 

   if ( -1 == semctl(semid, 0, IPC_RMID, arg))

   {

      printf( "semctl()-IPC_RMID 실행 오류\n");

      return -1;

   }

   printf( "프로그램 종료\n");

   return 0;

}

 

]$ gcc main.c -lpthread       // 소스에 쓰레드를 이용하므로 옵션에 -lpthread를 추가

]$ ./a.out

thread1 실행

thread1 완료

thread2 실행

카운터= 1

thread2 완료

thread1 실행

thread1 완료

thread2 실행

카운터= 2

thread2 완료

thread1 실행

thread1 완료

thread2 실행

카운터= 3

thread2 완료

thread1 실행

thread1 완료

thread2 실행

카운터= 4

thread2 완료

thread1 실행

thread1 완료

thread2 실행

카운터= 5

thread2 완료

thread1 실행

thread1 완료

thread2 실행

thread2 완전 종료

thread1 실행

thread1 완전 종료

프로그램 종료

]$

#include <windows.h>

#include <stdio.h>

 

#if(0)

gcc -Wall -DTEST_PRINTF -c win12.c

gcc -o win12 win12.o -lm -lws2_32 -lgdi32

#endif

 

void gotoxy(int x, int y)      // 좌표 보내기 gotoxy

{

    COORD Cur;

    Cur.X=x;

    Cur.Y=y;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);

}

void cursor(int n) // 커서 보이기 & 숨기기

{

    HANDLE hConsole;

    CONSOLE_CURSOR_INFO ConsoleCursor;

 

    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

 

    ConsoleCursor.bVisible = n;

    ConsoleCursor.dwSize = 1;

 

    SetConsoleCursorInfo(hConsole , &ConsoleCursor);

}

int main(void)

{

    POINT pt; // 마우스 포인터

    int x[50000]; // 매크로 x좌표

    int y[50000]; // 매크로 y좌표

    int sub_x[50000], sub_y[50000]; // 보조 xy

    int check_mouse = 2; // 마우스 관련 변수

    int i = 0; // 매크로 녹화시 이용

    int n = 0; // 메크로 진행시 이용

 

 

    system("mode con: cols=31 lines=13"); // 화면 고정

    cursor(0); // 커서 숨기기

 

    gotoxy(0,0);

    puts("┏━━━━━━━━━━━━━┓"); // puts함수는 자동으로 줄바꿈 처리를 한다.

    puts("┃             ┃");

    puts("┃     Mouse Macro    ┃");

    puts("┃             ┃");

    puts("┃  F5 : 매크로 녹화    ┃");

    puts("┃  F6 : 매크로 추가녹화 ┃");

    puts("┃  F7 : 매크로 정지   ┃");

    puts("┃  F8 : 매크로 시작   ┃");

    puts("┃  F10 : 종료하기      ┃");

    puts("┃  F11 : 상세 도움말    ┃");

    puts("┃             ┃");

    puts("┗━━━━━━━━━━━━━┛");

 

    while(1)

    { 

        if(GetKeyState(VK_F10) < 0) // F10키 누르면

        {

            return 0; // 프로그램 종료

        }

        else if(GetKeyState(VK_F11) < 0 ) // F11키 누르면

        {

            gotoxy(0,0);

            puts("┏━━━━━━━━━━━━━┓");

            puts("┃  F5 : 매크로 녹화    ┃");

            puts("┃  >>처음부터 녹화를 시작 ┃");

            puts("┃  F6 : 매크로 추가녹화 ┃");

            puts("┃ >>계속 이어서 녹화     ┃");

            puts("┃             ┃");

            puts("┃  녹화 뒤 매크로 정지 후 ┃");

            puts("┃  매크로 시작을 누르면   ┃");

            puts("┃  매크로가 진행됩니다.  ┃");

            puts("┃  (마우스 매크로만 가능)  ┃");

            puts("┃   Esc : 돌아가기   ┃");

            puts("┗━━━━━━━━━━━━━┛");

 

            while(1)

            {

                if(GetKeyState(27) < 0) // Esc키 누르면

                {

                    gotoxy(0,0);

                    puts("┏━━━━━━━━━━━━━┓");

                    puts("┃             ┃");

                    puts("┃     Mouse Macro    ┃");

                    puts("┃             ┃");

                    puts("┃  F5 : 매크로 녹화    ┃");

                    puts("┃  F6 : 매크로 추가녹화 ┃");

                    puts("┃  F7 : 매크로 정지   ┃");

                    puts("┃  F8 : 매크로 시작   ┃");

                    puts("┃  F10 : 종료하기      ┃");

                    puts("┃  F11 : 상세 도움말    ┃");

                    puts("┃             ┃");

                    puts("┗━━━━━━━━━━━━━┛");

                    break; // while문 탈출

                }

            }

        }

        else if(GetKeyState(VK_F5) < 0 ) // 처음부터 다시 매크로 설정

        {

            for(i = 0 ; i <= 50000 ; i ++)

            {

                x[i] = -858993460; y[i] = -858993460; // 초기화 과정

                sub_x[i] = -858993460; sub_y[i] = -858993460;

                // 이때 모든 값은 모니터 해상도에 따라 마우스 좌표값이

                // 될 수 있어서 쓰레기값인 -858993460을 이용했다.

                // 추천하는 방법은 아니다.

            }

            i = 0;

 

            while(1)

            {

                GetCursorPos(&pt); // 마우스 좌표값들 받아옴

                x[i] = pt.x; // x좌표값 저장

                y[i] = pt.y; // y좌표값 저장

                sub_x[i] = 0, sub_y[i] = 0; // 왼쪽버튼 누르고 떼는 모습 저장하는 곳

                i++; // i는 프레임을 의미

                Sleep(10); //  0.01초 마다 1프레임 찍힘

 

                if(GetKeyState(VK_LBUTTON) < 0 && check_mouse >= 1)  // 왼쪽버튼 눌렀을 때

                {

 

                    sub_x[i] = x[i-1];

                    sub_y[i] = y[i-1];

                    x[i] = 5000;

                    y[i] = 5000;

 

                    check_mouse = 0;

 

                    i++;        

                }

                else if(GetKeyState(VK_LBUTTON) >= 0 && check_mouse == 0) // 왼쪽버튼 뗄 때

                {

 

                    sub_x[i] = x[i-1];

                    sub_y[i] = y[i-1];

                    x[i] = 6000;

                    y[i] = 6000;

 

                    check_mouse = 1;

 

                    i++;        

                }

 

 

                if(GetKeyState(VK_F7) < 0 )

                {

                    break;

                }

                if(GetKeyState(VK_F10) < 0 )

                {

                    return 0;

                }

            }

        }

        else if(GetKeyState(VK_F6) < 0 ) // 이어서 매크로 설정

        {

 

            while(1)

            {

                GetCursorPos(&pt);

                x[i] = pt.x;

                y[i] = pt.y;

                sub_x[i] = 0, sub_y[i] = 0;

 

                i++;         

                Sleep(10);

 

                if(GetKeyState(VK_LBUTTON) < 0 && check_mouse >= 1)  // 왼쪽버튼 눌렀을 때

                {

 

                    sub_x[i] = x[i-1];

                    sub_y[i] = y[i-1];

 

                    x[i] = 5000;

                    y[i] = 5000;

                    check_mouse = 0;

 

                    i++;        

                }

                else if(GetKeyState(VK_LBUTTON) >= 0 && check_mouse == 0) // 왼쪽버튼 뗄 때

                {

                    sub_x[i] = x[i-1];

                    sub_y[i] = y[i-1];

                    x[i] = 6000;

                    y[i] = 6000;

                    check_mouse = 1;

 

                    i++;        

                }        

 

                if(GetKeyState(VK_F7) < 0 )

                {

                    break;

                }

                if(GetKeyState(VK_F10) < 0 )

                {

                    return 0;

                }

            }

        }

        else if(GetKeyState(VK_F8) < 0 ) // 매크로 재생

        {

            n = 0; // 프레임 처음으로 돌아가서 재생하기 위한 n

 

            while(1)

            {

                if(x[n] == 5000) // 왼쪽버튼 눌러지는 것을 5000이라고 가정

                {

                    mouse_event(MOUSEEVENTF_LEFTDOWN, sub_x[n], sub_y[n], 0, 0); // 좌표에 맞게 왼쪽버튼 누르기

                    Sleep(1);

                }

                else if(x[n] == 6000) // 왼쪽버튼 떼지는 것을 6000이라고 가정

                {

                    mouse_event(MOUSEEVENTF_LEFTUP, sub_x[n], sub_y[n], 0, 0);  // 좌표에 맞게 왼쪽버튼 떼기

                    Sleep(1);

                }

 

                if(x[n] == -858993460) // 쓰레기값 만나면 처리되는 작동

                {

                    n = 0; // 즉, 매크로의 끝부분으로 가면 다시 n = 0 으로 하여 다시 처음부터 시작

                }

 

                SetCursorPos(x[n],y[n]); // 지정한 곳의 좌표로 마우스 이동

                Sleep(10);

 

                n++;

 

                if(GetKeyState(VK_F7) < 0 )

                {

                    break;

                }

                if(GetKeyState(VK_F10) < 0 )

                {

                    return 0;

                }

            }

        }

        Sleep(10);

    }

    return 0;

}

 

+ Recent posts