12612151=55

와 같은 식이 주어졌을 때,

1+26+12+15+1=55

처럼 등식이 성립하게 만들어서 출력하는 문제다.

제한 조건은 ( 식의 길이 ) ≤ 1000, ( 오른쪽 항의 값 ─ 자연수 ) ≤ 5000 이고,

답은 유일하진 않지만 항상 존재하며,

더하기의 개수를 가장 적게 하는 것중 하나를 출력하면 된다.

채점 : http://www.acmicpc.net/problem/2978

*주의 : 1+0001+1=3 은 올바른 출력이다. 즉, Leading Zero가 있어도 된다.

Spoiler

신고

http://thecodeplayer.com/walkthrough/create-binary-trees-using-javascript-and-html5-canvas


와 멋지다! 코드플레이어도 신기하고, 캔버스 객체도 정말 신기하다 ㅋㅋ

공부해서 꼭 써봐야지.

P.S.

다시 코드플레이어를 들어가보니까..ㅋㅋ

자바스크립트랑 HTML5, CSS3 공부하기 재밌는 사이트를 찾은 것 같다

http://thecodeplayer.com/

Learn HTML5, CSS3, Javascript and more...

Video style walkthroughs showing cool stuff being created from scratch



신고

#1. Count the number of outer loops.

버블 소트에서의 바깥 루프 세기.

약간 최적화된 버블 소트에서의 바깥 루프가 얼마나 도는지 세는 문제입니다.

아래 문제를 보세요 ( 출처 : http://www.acmicpc.net/problem/1377 ).

int i;

for ( i=1; i<=N; i++ ) {

int working = 0;

for ( int j=1; j<=N-i; j++ ) {

if ( arr[j] > arr [j+1] ) {

swap ( arr[j], arr[j+1] );

working = 1;

}

}

if ( !working ) break;

}

printf ( "%d\n", i );

여기서 과연 몇이 출력될까요?

잘 생각해보면 정말 간단합니다.

Solution


#2. Count the number of swaps.

버블 소트에서의 스왑 횟수 세기.

이건 아까의 문제보다 약간 더 복잡합니다.

생각이 복잡한건 아닌데, 코딩이 복잡하죠 ㅋㅋ

두 가지의 풀이법이 있는데,

하나는 Binary Indexed Tree ( Low Bit라고도 부르더군요 ) 를 이용한 풀이,

다른 하나는 Merge Sort를 이용한 풀이입니다.

(작성중)

신고

http://heart4u.co.kr/tblog/292

http://wiki.kldp.org/Translations/html/Socket_Programming-KLDP/Socket_Programming-KLDP.html#select

Windows 환경에선 Winsock이 자체적으로 Asynchronous한 통신을 지원하는듯 한데,

Linux 환경에선 그런걸 찾을 수 없었다

그래서 대안을 찾은 것이 바로 Select와 FD_SET.


FD_SET은 말 그대로 File Descriptor들의 Set이다.

FD_SET을 선언 및 초기화하고,

거기에 상태가 궁금한 FD들 ( e.g. socket, stdin, file, ... ) 을 넣은 뒤

select()를 실행하면!

현재 읽기 가능한 FD, 쓰기 가능한 FD, 에러가 난 FD의 집합을 각각 얻어낼 수 있다.

확인하는 방법도 간단한데,

FD_ISSET()을 이용하면 된다.

이 얼마나 편리한가 ㅜㅜ

일단 지금은 코딩이 바쁘니

자세한건 다음에 추가.

신고
간단히 API를 이용하면 됩니다ㅋㅋㅋ

/**********예시 코드 ( C언어 )***********/

#include <Windows.h>

#include <stdio.h>

#include <stdlib.h> /* * 콘솔의 글자와 배경 색을 변경해주는 함수. */ void setColor ( int Color ) { SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , Color ); } /* * 창의 크기를 변경하는 함수. */ void setConSize ( int row, int col ) { char buf[256] = {0}; sprintf ( buf, "mode con: lines=%d cols=%d", row, col ); system ( buf ); } /* * 커서의 위치를 X,Y로 옮겨주는 함수. */ void gotoXY ( int x, int y ) { COORD pos = { x, y }; SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ) , pos ); } /* * 커서를 보일지 보이지 않을지 결정하는 함수. */ void setCursorview ( char visible ) { CONSOLE_CURSOR_INFO cursor = { 1, visible }; SetConsoleCursorInfo( GetStdHandle ( STD_OUTPUT_HANDLE ) , &cursor ); }


참고 색상표 ( -1은 없는 색, 그냥 자리를 맞추기 위해 넣었습니다 )



신고

출처 : http://onecellboy.tistory.com/221


리눅스 콘솔에 출력되는 글자색, 글자배경색 변경


글자색 변경 

\x1b[Nm   --> # N = (30 ~ 37)
 예) \x1b[31m    -->  붉은 글자색 


글자 배경색 변경

\x1b[Nm   --> # N = (40 ~ 47)
 예) \x1b[41m    -->  붉은 배경색 


해제

\x1b[0m   --> 적용된 글자/배경색이 해제된다.


테스트 해보기

1. 콘솔에서 테스트
echo -e "\x1b[31m RED TEST"

이 명령 후 콘솔의 모든 출력은 붉은 글자이다. 꼭 해제해 주기 바란다.

2. 프로그래밍 테스트
#include<stdio.h>
int main(){
    printf("\x1b[31m RED TEST");
return 0;
}



색 코드 

 30 : Color Test,   40 : Color Test
31 : Color Test,   41 : Color Test
32 : Color Test,   42 : Color Test
33 : Color Test,   43 : Color Test
34 : Color Test,   44 : Color Test
35 : Color Test,   45 : Color Test
36 : Color Test,   46 : Color Test
37 : Color Test,   47 : Color Test

신고

#include<cstdio>

#include<cmath>

#include<algorithm>

#define f first

#define s second

using namespace std;

typedef pair<double,double> dd;

dd isl[10001],rad[10001];

int main(){

int N,d;

for(int T=1;~scanf("%d%d",&N,&d);T++){//EOF까지 받음

//if(N+d==0)break; 필요없음

for(int i=0;i<N;i++)

scanf("%lf%lf",&isl[i].f,&isl[i].s);

bool fail=0;

for(int i=0;i<N&&!fail;i++){

if(d>0&&d*d>=isl[i].s*isl[i].s){

//각각의 섬에 대해 레이더를 놓을 수 있는 경우를 저장함 :

//섬이 레이더 반경의 오른쪽 끝에 걸치게 하는 경우 레이더의 x좌표 : rad[i].f

//섬이 레이더 반경의 왼쪽 끝에 걸치게 하는 경우 레이더의 x좌표 : rad[i].s

double dist=sqrt(d*d-isl[i].s*isl[i].s);

rad[i].f=isl[i].f-dist;

rad[i].s=isl[i].f+dist;

}else fail=1;//레이더로 커버가 불가능함.

}

if(fail){

printf("-1\n");//불가능하면 -1

continue;

}

//레이더들을 rad[i].f 기준으로 정렬한다.

sort(rad,rad+N);

int ans=1;

double nr=rad[0].s;

for(int i=1;i<N;i++){

if(rad[i].f<=nr){

//현재 레이더로 다음 섬까지 커버 가능한 경우

if(nr>rad[i].s)nr=rad[i].s;

}

else{

//아닌 경우

ans++;

nr=rad[i].s;

}

}

printf("%d\n",ans);

}

return 0;

}

신고


C_Arrays.pptx


ㅋㅋ여름방학에 친구들 가르쳐주려고 만들었던 강의자료..

배열 기초에 대해 다뤘습니다.

신고