본문 바로가기

프로그래밍

PKU 1979. Red and Black. AC get~ #include #include #include using namespace std; char a[101][101]; int b[101][101]; int total, m, n; void __fastcall isMovable(int x, int y) { total++; b[x][y] = 1; if (x - 1 >= 0) { if (a[x - 1][y] == '.' && b[x - 1][y] == 0) { isMovable(x - 1,y); } } if (x + 1 = 0) { if (a[x][y - 1] == '.' && b[x][y - 1] ==.. 더보기
PKU 1979. Red and Black 빨간 것과 검은 것 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3868 Accepted: 2523 설명 정사각형의 타일이 덮어진 사각형 모양의 방이 있습니다. 각 타일은 빨간색 또는 검은색이 칠해져 있습니다. 한 남자가 검은색 타일 위에 서있습니다. 그 타일에서부터, 그는 붙어있는 4개의 타일중 하나로 움직일 수 있습니다. 단, 빨간색 타일로는 이동할 수 없으며 오로지 검은색 타일로만 이동할 수 있습니다. 위에서 설명한 방식으로 그 남자가 이동할 수 있는 검은색 타일을 세는 프로그램을 만드세요. 입력 입력할 것은 복합적인 데이터 집합들이 있습니다. 입력할 데이터 집합은 x- 축과 y- 축의 방향에 있는 타일의 갯수를 의미하는 두 개의 양정수로.. 더보기
PKU 1979. Red and Black Red and Black Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3868 Accepted: 2523 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles. Write a program to count the number of .. 더보기
객체지향 이야기 5. MFC와 객체지향. // HelloApp.h: interface for the CHelloApp class. // ////////////////////////////////////////////////////////////////////// #include #if !defined(AFX_HELLOAPP_H__F398515F_9AAC_4AF5_8DAA_F0A1CE874AD3__INCLUDED_) #define AFX_HELLOAPP_H__F398515F_9AAC_4AF5_8DAA_F0A1CE874AD3__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CHelloApp : public CWinApp { public: virtual BOOL .. 더보기
객체지향 이야기 4. 생활속의 객체지향. 일상적인 생활 속에서도 객체지향을 만나 볼 수 있습니다. (이 글은 픽션입니다 -_-) ---------------------------------------------------------------------------------------- 컴퓨터공학과인 A군은 F학점을 면하기 위해 귀찮은 수업을 들으러 학교로 나섭니다.(-_-;;) 그리고는 하나의 객체를 마주하게 되지요. 자동차라는 객체. 아니, 자동차라는 클래스에서 '상속'된 경차 클래스의 객체중 하나입니다. 속성으로 제조사와 연식, 엔진의 배기량 및 여러가지가 있고... 현재 상태는 "과속"이네요. A군은 한마디 내뱉고 갑니다. "니가 뭔 스포츠카냐."(-_-...) 그리고는 학교에 도착합니다. 완벽한 군용 건물처럼 견고하기 그지없는 학교 건.. 더보기
PKU 3077. Rounders. AC get~ #include using namespace std; int main() { int cases, cipher, data, i; cin >> cases; for (i = 0; i > data; cipher = 10; while (data / cipher != 0) { data += cipher / 2; data /= cipher; data *= cipher; cipher *= 10; } cout 더보기
PKU 3094. Quick sum. AC get~ #include #include using namespace std; int main() { string temp; int sum, i; while(getline(cin, temp)) { if (temp[0] == '#') { break; } sum = 0; i = 0; while(temp[i] != '\0') { if (temp[i] == ' ') { i++; continue; } sum += (i + 1) * (temp[i] - 'A' + 1); i++; } cout 더보기
PKU 3094. Quicksum 고속합 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3382 Accepted: 2397 설명 검사합계는 데이터의 패킷을 검사하여 하나의 숫자로 되돌려 주는 알고리즘이다. 기본 구조는, 패킷이 변하면 검사합계 또한 변하고, 그러므로 검사합계는 전송상의 에러를 찾아내거나, 문서의 내용을 확인하거나, 그리고 바람직하지 않은 데이터의 변화를 찾아야 하는 수많은 경우에 필요된다. 이 문제에서는, 당신은 '고속합'이라고 불리는 검사합계 알고리즘을 충족시켜야 한다. 고속합 패킷은 대문자와 공백만을 허용한다. 그것은 언제나 시작과 끝을 대문자와 함께 한다. 반면에, 일반적인 공백과 문자는 , 연속적인 공백을 포함하여 어떤 조합도 만들 수 있다. 고속합은 각 .. 더보기
PKU 3094. Quicksum Quicksum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3382 Accepted: 2397 Description A checksum is an algorithm that scans a packet of data and returns a single number. The idea is that if the packet is changed, the checksum will also change, so checksums are often used for detecting transmission errors, validating document contents, and in many other situations where it is necess.. 더보기
프로그래밍과 수학. 누가 알이고 누가 닭일까? 부질없는 잡질사진 올라오고... 제가 머리를 다쳐서 미쳤나 봅니다. 방 정리를 다하다니. -_-; 방 정리중 찍은 사진입니다. 저 맨 밑에 The art of computer programming 3권을 제외하면 전부 최소 3회 이상씩은 읽은 플밍 책들입니다. 여기저기 빌려준 책들까지 다 합치면 두 줄로 쌓아서 방 천장에 닿고도 남겠더군요. -_-;;; 그 중 반이 중딩때 봤던 책입니다만... 그때 수학만 파던 친구 하나가 했던 말이 문득 떠오릅니다. "프로그래밍은 수학의 도구일 뿐이야. 너희는 물론이고 많은 사람들이 반대로 하고 있어." 라구요. 생각해 보면 정말 그럴지도 모릅니다. 지금 PKU와 UVa 문제 풀 때도 수학의 공식들을 끌어 오기나 했지, 수학적 공식을 스스로 만든 적은 거의 없었습니다... 더보기
PKU 3077. Rounders Rounders Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3128 Accepted: 2031 Description For a given number, if greater than ten, round it to the nearest ten, then (if that result is greater than 100) take the result and round it to the nearest hundred, then (if that result is greater than 1000) take that number and round it to the nearest thousand, and so on ... Input Input to this p.. 더보기
PKU 3077. Rounders 정수화하는 것들 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3128 Accepted: 2031 설명 주어진 숫자에 대해서, 10보다 크다면, 가까운 십 단위로 정수화 시키고, 또 (만약 결과가 100보다 크다면) 결과를 가까운 백 단위로 정수화 시키고, 또 (만약 결과가 1000보다 크다면) 결과를 가까운 천 단위로 정수화 시키고, 그렇게 계속... 입력 이 문제의 입력은 정수화 시킬 숫자를 지시하는 하나의 정수 n을 포함하는 행에서 시작한다. 다음 n 행들은 각각 하나의 정수 x(0 더보기
PKU 2388. 누가 중간 녀석이냐? AC get~ #import int i=-1,buf[9999];int main(){while(cin>>buf[i++]);sort(buf,buf+i-1);cout 더보기
PKU 2388. Who's in the Middle 가운데 있는 것은 누구 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7089 Accepted: 4265 설명 FJ는 그의 소떼중 가장 평균적인 소를 찾으려 한다. 그는 이 '중앙값' 젖소가 우유를 얼마나 생산하는지를 알고 싶어한다: 젖소들중 절반은 우유 생산량의 중앙값보다 크거나 같게 ; 절반은 우유 생산량의 중앙값보다 작거나 같게 우유를 생산한다. 홀수인 젖소의 개체수를 N (1 더보기
PKU 2388. Who's in the Middle Who's in the Middle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7089 Accepted: 4265 Description FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median' cow gives: half of the cows give as much or more than the median; half give as much or less. Given an odd number of cows N (1 더보기
PKU 1804. 뇌인간(?) get AC~ #include #include using namespace std; int main() { int x, y, i, j, n, data, buf[1000], cnt; cin >> n; for (x = 1; x > data; cnt = 0; for (y = 0; y > buf[y]; } for (i = data - 2; i >= 0; i--) { for (j = 0; j buf[j + 1]) { cnt++; swap(buf[j], buf[j + 1]); } } } cout 더보기
PKU 1804. Brainman. 뇌인간(?) Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3041 Accepted: 1737 설명 배경 Raymond Babbitt은 동생 Charlie 를 미치도록 몰아댔다. 최근 Raymond는 246개의 이쑤시게를 바닥에 흩뿌려놓고는 힐끗힐끗 쳐다보기만 했다. 그리고 심지어는 포커 카드를 세기까지 했다. 찰리는 같은 방식으로 머리를 쓰게 해서 엿먹이고 싶어 한다. 문제 찰리가 생각한 것은 이러하다. N개의 숫자가 늘어진 수열이 있다고 하자. 목표는 이 수열이 최종적으로 정렬되게 하는 것인데, 한번에 이웃한 두개의 숫자밖에 바꿀 수 없다. 예를 들면 : Start with: 2 8 0 3 swap (2 8) 8 2 0 3 swap (2 0).. 더보기
PKU 1804. Brainman. Brainman Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3041 Accepted: 1737 Description Background Raymond Babbitt drives his brother Charlie mad. Recently Raymond counted 246 toothpicks spilled all over the floor in an instant just by glancing at them. And he can even count Poker cards. Charlie would love to be able to do cool things like that, too. He wants to beat his brother in a.. 더보기
리턴군의 테스트케이스 의존성 코드가 먹혀들어간 이유. http://ko.wikipedia.org/wiki/%EB%B0%80%EB%9F%AC-%EB%9D%BC%EB%B9%88_%EC%86%8C%EC%88%98%ED%8C%90%EB%B3%84%EB%B2%95 밀러-라빈 소수판정법에 관한 위키페디아의 링크입니다. 참 난감...한 소수판정법이긴 합니다. "이건 일단 합성수다!"라고 판정은 할 수 있지만, "이거 소수인거 같긴 한데..."라니 원 ㄱ-;; 우리가 풀었던 factovisor에서도 순수하게 그냥 소수로 쌩 때리면 풀기 힘든만큼, 테스트케이스에서 약간의 여유를 부려 밀러-라빈 소수판정법으로 풀 수 있게 해둔것 같습니다. 리턴군, 환타님, 저 세명의 코드에 대한 테스트케이스들의 결과로 보컨데 예상되는 형태의 테스트케이스들은 모두 밀러-라빈 소수판정법에 의해.. 더보기
객체지향 이야기 3. 클래스랑 객체가 뭐가 다른건데? 객체지향에 처음 입문하는 사람들에게 상당히 설명해주기 어려운 한가지. -_- 클래스와 객체의 차이점입니다. -_-;; ---------------------------------------------------------------------------------------- class A { 쌸라쌸라쌸라..... } int main() { A a; a.out("아놔 어쩌라고~~\n"); } 으흠. 저 코드를 보면 클래스와 객체의 차이점을 볼 수 있습니다. 클래스는 "객체를 찍어내기 위한 틀"입니다 -_-! 수많은 객체지향 책들을 보면 참 난감하게 글들을 써놨습니다. 어떤 책은 "클래스는 곧 객체요, 클래스의 소통으로 이루어진게 객체지향형 프로그램이다." 또 어떤 책은 "클래스와 객체는 서로 다른 개념이.. 더보기
PKU 2649. Factovisor. get AC -_- #include #include #define TRUE 1 #define FALSE 0 int m, n; int isPrime(int m) { int i; if(m 더보기
PKU 2649. Factovisors. TLE #include #include using namespace std; unsigned __int64 n; int GCD(int a, int b) { while (1) { if (a % b == 0 || b % a == 0) { break; } if (a > b) { a %= b; } else { b %= a; } } if (a % b == 0) { return b; } else { return a; } } bool isPrime(int a) { int i, limit; if (a n >> m) { if (....) { cout 더보기
객체지향 이야기 2. 그럼 객체는 뭔데? 객체란 뭐.... 별거 아니구요. "데이터를 중심으로 무언가 행동을 하는 주체" 입니다. 기존의 절차지향에서는 "데이터"란 단지 "다뤄야 할 대상"이었지만, 객체지향에서는 "객체"가 "데이터"를 가지고 있고, "주체적으로 다른 객체와 대화하는" 형태입니다. 이 객체들간의 대화나 상호 작용이 프로그램이 된다고 전 포스트에 써두었지요? 인간이라는 객체의 형상화입니다. (원래 포토샵으로 해두었으나 날라갔습니다. 죄송 ㄱ-;) 인간은 "이름, 성별, 키, 몸무게, 나이"라는 데이터를 가지고 있고, "말하기"라는 동작을 통해 자신의 데이터를 다른 인간객체에게 알려주거나, 다른 인간객체의 데이터를 수집합니다. 그리고 다른 인간객체와의 상호작용을 통해 "때리"거나, "걷어차"거나.... ....... 예시가 좀 격한.. 더보기
재미있는 소스코드 하나 가져왔습니다. #include #include using namespace std; int main() { __int64 tc, num, i, j, x, k, l; __int64 a, b, c; cin>>tc; l = 1390000; while(tc--) { cin>>num; for (i = 1; ;i++) { a = (int)log10((double)i); b = (int)pow(10., (double)a); k = (a * b + (1 - b)/9) + (i - (b - 1)) * (a + 1); if (num = x * ((int)log10((double)x) + 1); x *= 10) { num -= x * ((int)log10((double)x) + 1); } x /= 9; a = (int)log10((dou.. 더보기
객체지향 이야기 1. 객체지향이 뭐야? 갑작스레 시작하는 객체지향 이야기. 그것도 시리즈물 이에요 -_-; --------------------------------------------------------------------------------------------------- 처음 프로그래밍이 탄생한 순간, 기계에 천공카드를 원하는 규칙에 맞춰 뚫어서 넣어 컴퓨터를 가동하던 그 때. 무식하게 느린 컴퓨터이지만 복잡하고 귀찮은 계산들을 손쉽게 처리해 주었기에, 수많은 사람들이 열심히 천공카드에 하나 하나 구멍을 뿅 뿅 뚫어가며 프로그램을 만들었습니다. 이 후, 기계어 단위로 0, 1을 직접 우겨넣다 못해, 어셈블리 언어가 생겼지요. 정말 단순했습니다. 그냥 순서대로 컴퓨터가 해야 할 일을 프로그래머가 알아먹을 수 있도록 기계어와 1 :.. 더보기
PKU 1844. Sum. AC get!~ #include int main() { int i, j, sum = 0; scanf("%d", &i); for (j = 1; j = i) { if (!((sum - i) % 2)) { printf("%d\n", j); break; } } } return 0; } 흐음. 이번에도 쉬운 문제이지요? 1부터 N까지 숫자를 나열해 두고, 각 숫자마다 부호를 아무렇게나 둔 다음, 부호까지 붙인 수들을 합해서 S가 되게 만들되, 그 N중 최소를 출력하는 겁니다. 제 솔루션은 간단합니다. 1부터 N까지의 합을 그냥 구합니다. -_-; 이 때 1부터 N까지의 합이 S보다 크다면, S는 1부터 N까지의 숫자중 몇개를 뽑아서 만들 수 있.. 더보기
PKU 1844. Sum. 합!? Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4816 Accepted: 3123 설명 1부터 N까지의 자연수를 생각해 봅시다. 여기에 부호를 붙여보도록 하지요.(+나 -). 그리고 그대로 더해버려서 합계 S를 만들어 봅시다. 문제는 S를 이루기 위한 이 자연수들의 최소 갯수를 구하는 것입니다. 1부터 N까지 모두 쓰되 부호는 마음대로 붙여서 S를 만들기 위해 가장 적은 개수의 숫자로 S를 구성할 수 있게 합시다. 주어진 합 S에 대하여, 1부터 N까지 부호는 마음대로 붙여 최소의 N이 되는 경우를 구해 N을 출력하세요. 입력 한 줄만 입력받되, 합인 S를 0보다는 크고 100000보다는 작은(0< S 더보기
PKU 1844. Sum. Sum Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4816 Accepted: 3123 Description Consider the natural numbers from 1 to N. By associating to each number a sign (+ or -) and calculating the value of this expression we obtain a sum S. The problem is to determine for a given sum S the minimum number N for which we can obtain S by associating signs for all numbers between 1 to N. For a.. 더보기
PKU 3685. Matrix. AC get! #include #include int main() { int n; __int64 N, M; __int64 min, max; __int64 x, j; __int64 sum; __int64 det, cal_1, cal_2; const __int64 w = 100000; scanf("%d", &n); while (n--) { scanf("%I64d%I64d", &N, &M); max = w * w * 10; min = -1 * max; while (min < max) { x = (min + max) / 2; if (x == max) { x--; } sum = 0; for (j = 1 ;(j = cal_1) { sum += (cal_2 - cal_1 + 1); } } if (sum < M) { min = x .. 더보기
이번 문제.... 아직 AC 받은건 아닌듸요... 너무 피로해서 지금 죽을꺼 같아서 솔루션 만들어놓고도 코드로 못옮기고 있는데... 이거 확인해 보셨나요? 식이 i^2 + 100000i + j^2 - 100000j + ij 잖습니까... i만 1 증가시켜 비교해 보면... i^2 + 100000i + j^2 - 100000j +ij와 i^2 + 100000i + j^2 - 100000j +ij + 2i + j + 100001이 되어서 i 증가시 2i + j + 100001만큼 증가함을 알 수 있지요. j만 증가시켜도 그렇겠지요? (1,1)의 값이 3이니 굳이 저 연산 안하고 증감에 따른 차이만큼만 더해도 나와요. -_-; 더보기