본문 바로가기

Solutions/Mr.K's Solution

PKU 2853. Sequence Sum Possibilities. [판정:TLE] ㅋㅋ 오랜만에 받아보는 TLE입니다 소스는 지금 활동하는 사람이 없어서 안올리고 판정 결과 찍은것만 올릴랬더니 이마저도 시스템 문제로 사진 업로드 불가 ㅋㅋ.. 더보기
PKU 2665. Trees. [판정:AC] 처음에 문제를 제대로 안읽고선 공사 구간끼리 겹치는가의 여부를 판단하는 부분까지 만들었다가 -_-; 지웠습니다 ㅋㅋ #include void main() { int l, m; int low, up; int trees; while(1) { scanf("%d %d", &l, &m); if( l == 0 && m == 0 ) break; trees = l + 1; while( m > 0 ) // instead of "for" repeatation { scanf("%d %d", &low, &up); trees -= ( up - low + 1 ); m--; } printf("%d\n", trees); } } 어려운 문제는 아니었군요 =ㄴ= 더보기
PKU 3673. Cow Multiplication. [판정:AC] 무식한 문제는 무식한 해결이 답이죠 -_-; #include void main() { int board[2][10] = {0}; int a, b; int acol, bcol; int i, j, temp; scanf("%d %d", &a, &b); acol = 0; while( a > 0 ) { board[0][acol] = a % 10; a /= 10; acol++; } bcol = 0; while( b > 0 ) { board[1][bcol] = b % 10; b /= 10; bcol++; } temp = 0; for( i = 0; i < acol; i++ ) { for( j = 0; j < bcol; j++ ) { temp += board[0][i] * board[1][j]; } } printf("%.. 더보기
UVa 300. Maya Calendar. [판정:AC] 번역 끝에 주석을 달아주었더라면 좋았을 문제였습니다 -_-; 가만보면 uva문제는 좀 더럽다는 느낌이 -_- Haab력(曆)의 경우 1년 365일이 열아홉달로 이루어져있고, 그 중 1월~18월까지는 매 월 스무번째 일까지(0~19), 19월에 한해서 다섯번째 일까지(0~4)만 있는 역법입니다 그러니까 문제의 input에 넣어야 되는 Haab력의 구성은 일(서수). 월 년 이 됩니다 Tzolkin력(曆)의 경우 1년이 260일로 이루어져있고, 그것을 20일씩 13개 구간으로 나누어놓은 역법입니다 각 날들은 모두 다르게 구분되어있고, 그것들은 두가지 주기(13, 20)에 의해 우리가 쓰는 60갑자의 그것과 같은 방식을 띄게 됩니다 번역문의 중간쯤 보면 '각 해의 시작을 나타내는 날들은 다음과 같이…' 하고 .. 더보기
PKU 1218. THE DRUNK JAILER. [판정:AC] 결론부터 말하자면 이 문제는 감방의 수를 n이라고 했을 때, n 이하의 제곱수가 몇개냐고 묻는 문제입니다 -_-; 저도 처음엔 unique님의 댓글을 보고 의아해했는데, 문이 열렸다 닫혔다 하는 과정을 좀 생각해보니 k번째 문이 조작되는 회수는 k의 양의 약수의 개수만큼이라는 것을 알게 되었습니다 ㅋ 감방의 문은 처음에 닫혀있기 때문에 홀수번 조작되어야 죄수들이 탈출할 수 있겠죠 즉, 양의 약수의 개수가 홀수개인 것들이 몇개냐를 묻는 것인데 양의 약수의 개수가 홀수개인 것들은 오직 제곱수들뿐입니다 -_-ㅋ #include #include void main() { int n; int doors, open; scanf("%d", &n); while( n > 0 ) { scanf("%d", &doors); o.. 더보기
PKU 1089. Intervals. [판정:WA] 위의 3건이 가장 최근에 제출해본 것입니다 그중 첫번째(Run ID: 5178307)는 검토해보니 정말 틀린부분이 있어서 WA가 났고 두번째(Run ID: 5192652)는 검토해보니 최악의 경우 O(n²)까지도 나올지도 모르겠더군요 (무작정 입력을 받아서 전부 정렬한 뒤에 겹치는 부분을 출력에서 생략하는 방식이라 -_-;) 그래서 팀블로그에 가장 마지막으로 끄적인 Intervals 풀이의 알고리즘과 유사하게 풀어보았습니다만 왜 WA가 또-_- 나오는지는 모르겠네요 #include using namespace std; class Interval { public: int lower; int upper; Interval() { lower = 0, upper = 0; } Interval( int a, int .. 더보기
PKU 2656. Unhappy Jinjin. [판정:AC] 오늘 병원가서 풀어볼 생각으로 문제를 읽었는데 적어가기도 민망할 만큼 쉬운놈이었네요 -_-;; #include int dscanf( int *pnum ) { scanf("%d", pnum); return *pnum; } void main() { int n, i; int hour, sum; int diff, trial; while( dscanf(&n) != 0 ) { diff = 0; trial = 0; for( i = 1; i 8 && (sum-8) > diff ) { diff = sum - 8; trial = i; } } printf("%d\n", trial); } } 더보기
PKU 2243. Knight Moves. [판정:AC] The Triangle을 풀기 이전에 손코딩으로 풀었던 문제입니다 -_-; 처음에는 시작점에서 n번만에 갈 수 있는 모든 위치를 표시하고 각 거리마다 어떤 규칙이 있는지 파악하려고 했었습니다만, ( 여기에서 거리란, 시작점에서 가로나 세로로만 움직여서 도착점까지 갈 때 필요한 움직임의 수를 의미합니다 ) ( 즉 a1에서 c2까지의 거리는 3이고, b4에서 h7까지의 거리는 9라고 간주합니다 ) 일정 거리까지만 규칙이 보이고 그 이후에는 규칙이 잘 보이지 않았습니다 그래서 벡터를 사용하여 문제를 풀기로 했습니다 ( 자료구조적 벡터 말고 수학적 벡터 -_-; ) 가만 보면, 시작점으로부터 거리가 짝수인 위치로는 짝수번만에 이동이 가능하고 시작점으로부터 거리가 홀수인 위치로는 홀수번반에 이동이 가능했습니다 (.. 더보기
PKU 1163. The Triangle. [판정:AC] 이건 뭐 제가 번역해놓고서 당시엔 풀이법을 모르겠어서 한쪽으로 밀어두었던 문제입니다 -_-;; 그러는 중에 들보군과 환타님의 솔루션이 올라와서 살짝 훑어보았습니다 소스는 읽다보면 풀이를 그대로 따라가게 될 것 같아서 거들떠보지도 않고 나머지 부분만 보았는데요 들보군의 것은 "AC Get"을 한글로 쳐놓은 "ㅁㅊ ㅎㄷㅅ"를 스파킹군이 이해하지 못해서 시작된 댓글놀이가 주가 되었고 -_-ㅋ 환타님의 것은 마지막에 시크하게 "그냥 큰 것만 골라서 더하면 되네요"라고 써놓은게 제 머리에 남아서 힌트가 되었습니다 -_-b 요새 계속 병원에 있어야 하는지라 "그냥 큰 것만 골라서 더하면 되네요"만 가지고 손코딩을 했습니다 크하하핰 왜 전 항상 다른 팀원들에 비해 압도적인 양의 코딩을 해야 문제가 풀리는걸까요 ㅠㅠ .. 더보기
PKU 2840. Big Clock. [판정:AC] 여러분 저 아직 살아있습니다 #include void main() { int t, h, m; char temp; scanf("%d", &t); while( t > 0 ) { scanf("%d %c %d", &h, &temp, &m); if( m != 0 ) printf("0\n"); else { h = (h + 12) % 24; printf("%d\n", (h == 0)? (h + 24): h); } t--; } } 나중에 여유가 생기면 풀려고 했는데 이건 당장 풀어도 될만하네요 -_-; 더보기
PKU 2039. To and Fro. [판정:AC] #include int dscanf( int *pnum ) { scanf("%d", pnum); return *pnum; } void main() { char string[256]; int column; while( dscanf(&column) != 0 ) { int i, j; int quo; // quotient int length; int key; char temp; scanf("%c", &temp); for( i = 0; i 더보기
UVa 324, PKU 1454. Factorial Frequencies. [판정:AC] 저도 처음에는 Dlbo군의 판정과 같은( 아마 같을 ) In the queue였습니다 그래서 일단 pku에 먼저 질러보자 하는 마음으로 질렀습니다 .. 두번의 CE를 받으면서 채점 기준이 좀 까다롭다는 생각을 했습니다 채점을 위해서는 형식을 통일해야한다는건 잘 알지만, 그냥 짜증나더라고요 ㅋㅋㅋㅋ pku에서 AC받고 uva로 넘어갔더니, 거기에서도 CE가 떠있길래 ( uva에 처음 제출한 소스와 pku에 처음 제출한 소스가 동일 ) pku에 마지막으로 제출한 소스를 그대로 uva에 제출했더니 AC가 나오더군요, 다행히 ㄷㄷ 소스를 올릴까 말까 했는데, 일단 올려봅니다 알고리즘은 매우 간단합니다 1~366의 범위를 갖는 자연수 k에 대해 k!의 값을 구해서, 그것의 각 자리수가 무엇으로 이루어져있는가를 보.. 더보기
PKU 1455. Crazy Tea Party. [판정:AC] 아 -_-; input이 6일때 왜 output이 6이 나오는지를 몰랐는데 알고나니 수열이 맞긴 맞군요 -_-; #include int linear( int n ) { if( n 1; n-- ) { res += n - 1; } return res; } } void main() { int m, n; scanf("%d", &n); while( n > 0 ) { int half; scanf("%d", &m); half = m / 2; printf("%d\n", linear(half) + linear(m-half)); n--; } } 여태까지 N/2은 생각해보지도 않고 N-1만 보고 있는 꼴이었으니 -_-; 더보기
PKU 1904. King's Quest. [판정:WA] ㅋㅋㅋ 젠장 알고리즘이 정리되지 않는 상태에서 그냥 막코딩했더니 이모양이군요 -_-; solving process에 올려놓은 케이스에 대해서는 잘 나옵니다만 아마 어딘가 틀렸으니 wa겠지요? =_= #include #include using namespace std; enum purity { CLEAN, DIRTY }; class Vertex { public: int odeg; int *dest; purity status; Vertex() { odeg = 0; dest = NULL; status = CLEAN; } }; list *ls; list::iterator iter; void permutation( Vertex *pv, int n, int depth ); int main() { Vertex *vs.. 더보기
PKU 2719. Faulty Odometer. [판정:AC] 크하하하 이건 뭐 제 포스팅을 미뤄놓고 놀다보니 문제풀 시간은 남는군요 풀이는 간단합니다 주어진 input에 대해서 input보다 작은 자연수들 중에 4가 하나라도 들어가는 것의 개수를 세어서 input에서 빼주면 됩니다 dscanf함수는 scanf함수를 가지고 응용한 함수입니다 이전에도 문제풀 때 종종 사용하였고 앞으로도 종종 쓰겠지요 scanf로 입력받은 숫자를 그대로 반환하는 기능을 합니다 (앞의 d는 scanf에서 %d로 입력받아서 -_-;) length함수는 input의 자리수를 구하는 함수입니다 를 include하여 [1 + log10(num)]을 구해도 같은 결과가 나올 것이고, 와 를 include하여 itoa와 strlen을 이용해도 같은 결과가 나올 것이라 짐작합니다 pow10함수는 1.. 더보기
PKU 2551. Ones. [판정:AC] 휴 TLE에 걸릴 줄 알았는데 다행스럽게도 AC받았습니다 :) int형을 가지고 문제를 풀려고 하면 오버플로우에 걸리기 때문에 큰 수를 저장할 수 있는 구조체 numstring을 만들었습니다 ones함수는 그 구조체에 len개의 1을 저장하는 기능을 하고, division함수는 구조체를 divisor로 나눈 나머지를 return합니다 main함수에서는 n을 입력받은 후에 최소 1개, 최대 LENBOUND개의 1을 저장하고 있는 구조체로 나누어서 그 나머지가 0이 되었을 때 break문을 타고 빠져나옵니다 참 쉽죠? #include #define LENBOUND 10000 #define ARRBOUND 2500 // LENBOUND/4 typedef struct numstring { int length; .. 더보기
PKU 1953. World Cup Noise. [판정:AC] 언뜻 보기에 어렵게 느껴질 수 있으나, 단순한 피보나치 수열의 응용에 지나지 않습니다 :) #include int fibonacci( int n ) { if( n 더보기
PKU 1089. Intervals. [판정:WA] 알고리즘을 약간 수정해서 TLE는 빠져나왔지만 WA군요 어디가 틀린건지 -_-; #include #include typedef struct interval { int lb; // lower bound int ub; // upper bound struct interval *prev; struct interval *next; } interval; typedef struct ilist { interval *head; interval *tail; int count; } ilist; void listinit( ilist *il ); int size( ilist *il ); interval* popFirst( ilist *il ); void iswap( interval *ix, interval *iy ); void.. 더보기
PKU 2845. 01000001. [판정:AC] 쩝; 정답률은 약 30%로 비교적 낮은 편에 속하는 것 같지만, 풀어보니 그런대로 쉽군요 이 문제를 야심차게 준비한 스파킹한테는 심심한 사과를.. ㅋㅋ #include #include typedef struct binary { char digit[81]; } binary; void clear( binary *b ) { int i; for( i = 0; i digit[i] = 0; } } void assign( binary *b ) { char digit[81]; int length; int i; int j; scanf("%s", digit); length = strlen(digit); i = 81 - length; for( j = 0; i < 81; i++, j++ ) { .. 더보기
PKU 1089. Intervals. [판정:TLE] (아나 새해 첫 글이 TLE라니 ㅋㅋㅋㅋㅋㅋㅋㅋ) 또 TLE입니다 -_-; #include #include typedef struct point { int value; int type; } point; void swap( int *x, int *y ) { int temp; temp = *x; *x = *y; *y = temp; } void bubbleSort( point *pp, int size ) { int i; int j; for( i = 0; i i; j-- ) { if( pp[j-1].value > pp[j].value ) { swap( &pp[j-1].value, &pp[j].value ); swap( &pp[j-1].type.. 더보기
PKU 1089. Intervals. [판정:TLE] 나름 자료구조를 배웠다고 써먹어볼려고는 하는데 좀 쓸모가 있어야지 써먹든가 하지요 -_- #include using namespace std; class interval { public: int lb; // lower bound int ub; // upper bound interval *prev; interval *next; interval(); }; interval::interval() { lb = 0; ub = 0; prev = NULL; next = NULL; } class ilist { public: interval *head; interval *tail; int count; ilist(); int size(); bool insertLast( int a, int b ); interval* popF.. 더보기
PKU 1298. The Hardest Problem Ever. [판정:AC] 인증 포스트를 수정하다보니 결과에는 이상이 없지만 알고리즘은 잘못된부분이 있어서 그 부분을 수정하고 제출했는데 pku 서버가 맛이 갔는지 어쩐지 지금 Waiting하는 사람들만 2page를 채우는듯 -_-; 소스 #include #include #include int compare( char *src, char *des ) { int i; for( i = 0; des[i] != '\0'; i++ ) { if( src[i] != des[i] ) return 0; } if( strlen(src) == strlen(des) ) { return 1; } else return 0; } void main() { char str[201]; int progress = 0; while( gets(str) ) { int .. 더보기
PKU 3438. Look and Say. [판정:AC] 난! 올라온 문제를 풀 뿐이고! 난이도는 아직 그대로일 뿐이고! 얼떨결에 sparking군 불지르는데 동참하고 있을 뿐이고! #include void main() { char str[1001] = ""; int cases; scanf("%d", &cases); while( cases > 0 ) { int count; char num; int i; scanf("%s", str); count = 1; num = str[0]; for( i = 1; str[i] != '\0'; i++ ) { if( num != str[i] ) { printf("%d%c", count, num); count = 1; num = str[i]; } else { count++; } } printf("%d%c\n", count, num.. 더보기
PKU 3030. Nasty Hacks. [판정:AC] 문제를 번역하는 지군에게는 미안하지만 이거, 사업가 문제(pku 2521)와 매우 유사한 문제인듯 -ㅠ- #include void main() { int n; int r; int e; int c; scanf("%d", &n); while( n > 0 ) { scanf("%d %d %d", &r, &e, &c); if( r > e-c ) { printf("do not advertise\n"); } else if( r < e-c ) { printf("advertise\n"); } else { printf("does not matter\n"); } n--; } } 더보기
PKU 2521. How much did the businessman lose. [판정:AC] 처음에 소스 완성을 하고 나서 보니 문제도 쉬운 것 같고, 심심하기도 하고 해서 숏코딩을 했습니다 그 결과가 147B이고, 아래 코드는 먼저 완성된 314B짜리입니다 아, 개인적으로 전 숏코딩 싫어합니다, 오해 없으시길 #include void main() { int n; int m; int p; int c; int lose = 0; while( scanf("%d %d %d %d", &n, &m, &p, &c) ) { if( n == m && m == p && p == c && c == 0 ) break; lose += n; if( m >= p ) lose -= m - p; else lose += p - m; printf("%d\n", lose); lose = 0; } } 더보기
PKU 2636. Electrical Outlets. [판정:AC] 아 이런 어처구니없는 실수를 하다니; #include void main() { int n; int k; int o[11] = {0}; int i; int able; scanf("%d", &n); while( n > 0 ) { able = 1; scanf("%d", &k); able -= k; for( i = 0; i < k; i++ ) { scanf("%d", &o[i]); } o[i] = -1; for( i = 0; o[i] != -1; i++ ) { able += o[i]; } printf("%d\n", able); n--; } } ..님이 지적해주신 부분을 수정하고나서 보니 able변수를 매 케이스마다 초기화해주는걸 깜빡했군요; 요즘 유독 exception 잡는 것에 신경쓰고 있는데 이런걸 놓치다니.. 더보기
PKU 2636. Electrical Outlets. [판정:RE] why?! #include void main() { int n; int k; int o[10] = {0}; int i; int able = 1; scanf("%d", &n); while( n > 0 ) { scanf("%d", &k); able -= k; for( i = 0; i < k; i++ ) { scanf("%d", &o[i]); } o[i] = -1; for( i = 0; o[i] != -1; i++ ) { able += o[i]; } printf("%d\n", able); n--; } } 그냥 쉬운 문제겠거니 하고 코딩했는데 이게 왠? -_-; 더보기
PKU 1979. Red and Black. [판정:AC] 발견 하나, 제목을 줄이면 R&B가 됩니다 :D #include #include int getRow( int position ); int getCol( int position ); void search( char *fld, char *brd, int position ); void RedNBlack( char *fld, int ara, int origin ); int row; int column; void main() { char *field; while(1) { scanf("%d %d", &column, &row); if( row == 0 && column == 0 ) break; else if( row > 0 && column > 0 ) { int area = row * column; int i; ch.. 더보기
PKU 3094. Quicksum. [판정:AC] #include void main() { char str[256]; do { gets( str ); if( str[0] == '#' ) break; else { int sum = 0; int i; for( i = 0; str[i] != '\0'; i++ ) { if( str[i] == ' ' ) continue; else sum += (str[i] - 'A' + 1) * (i + 1); } printf("%d\n", sum); } } while(1); } 매우 오랜만에 문제를 풀어보는 것 같군요 그동안 학교일이 바쁘다는 핑계로 안했었는데 -_-; 더보기
PKU 2388. Who's in the Middle. [판정:AC] #include void swap( int *x, int *y ) { int temp; temp = *x; *x = *y; *y = temp; } // with bubble sorting void ascendantOrdering( int *xAry, int length ) { int i; int j; for( i = 0; i i; j-- ) { if( xAry[j-1] > xAry[j] ) swap( &xAry[j-1], &xAry[j] ); } } } void main() { int n; int production[9999] = {0}; int i; scanf("%d", &n); for( i = 0; i < n; i++ ) { scanf("%d", &production[i]); } ascendantOr.. 더보기