Sablog Models 55

프로그래머가 말하는 PMP 100배 활용 - intro

얼마 전에 PMP가 생겼다. 생겼다고 말하면 돈 내고 사는 것을 뜻하겠지. (응?) 기종: T5 (i-Station) 모델명: T5-N Academy (8G) 특징: Launcher의 3D GUI, Triple Core OMAP2, 4.8 inch WVGA (800*480) 사양: Windows CE .NET 5.0 / 약 277g / 4000mAh LiP / ARM1136-OMAP2430 / ... (자세한 정보는 i-Station 사이트 해당 페이지로) 사실, 나는 PMP 시장 자체에 다소 부정적이었다. 특히 COWON 때문에... 이건 뭐 PMP계의 애니콜도 아니고. 말하자면 코원이든 아이스테이션이든 아이리버든 다른 곳에 투자할 비용과 적자를 PMP에서 벌고 있다. "뭐야?" 싶지만 대차대조표나 손..

유용한 확장 JavaScript Library (2) importScript()

JavaScript에는 import 기능이 없다. 알다시피 함수를 만들어 모듈화하는 것은 중요하다. 그 과정에서 소스가 길어지면 라이브러리를 몇 조각으로 쪼개게 되며, 한 파일에서 다른 파일을 불러와 함수를 사용할 필요가 있다. 파일 간에 의존성이 생기는 것이다. C에 #include가 있듯이, CSS에는 @import, PHP에는 @require나 @require_once, JSP에는 @include file이 있다. 그러나 JS에서는 이런 동적 링크 함수가 없어서, HTML에서 직접 script 태그를 이용하지 않으면 추가가 안 된다. 그러나 직접 불러오는 것이 불가능하다면 HTML에 script 태그를 집어넣으면 된다. 실행문 중간에 넣으려면, 가장 간단한 형태는 다음과 같다. document.wr..

유용한 확장 JavaScript Library (1) insertAfter()

"블로그에 새로운 글감을 찾았다." 라기보다는 그냥 가내수공업으로 JS로 이것저것 만드는 도중에 함수를 만들고 있다. 최근에 JS를 새로 익히면서 DOM 따위는 순식간에 이해했지만(이미 XML을 충분히 배운 덕분에), 역시 골치를 썩이는 건 이 함수 놈들. 표준 함수들은 그나마 용법이 잘 정리되어 있지만... 사용자가 만들어서 널리 쓰이는 함수들 때문에 헷갈리기 일쑤다. 확장 함수 이름을 다 똑같이 쓰다 보니 표준 함수인지 헷갈리기 시작하면 2시간 삽질은 기본이다. 그래서 나는 표준 함수 말고 일단 확장 함수들을 정리할 생각이다. 이 글을 읽는 사람이 DOM, 노드 구조 등에 관한 기본 지식이 있는 초보 개발자라고 가정하고, 상세한 설명은 하지 않겠다. 첫 번째 대상은 insertAfter()이다. 이 ..

2009 정보올림피아드 지역본선 문제 Review (5)

시험 당일에 5개의 문제 중 5번을 가장 쉽게 푼 것 같다. 중앙문자열 문자열에서 교체 연산은 문자열의 한 문자를 다른 문자로 바꾸는 연산이다. 예를 들어, 문자열 “computer”에서 4번째 문자 p를 m으로 교체하면 “commuter”가 된다. 같은 길이의 두 문자열 P와 Q의 거리 d(P,Q)는 P를 Q로 바꾸기 위한 교체 연산의 최소 개수로 정의된다. 예를 들어 P = “computers”, Q = “consumers”라 하면, P에서 3번째 문자 m을 n으로, 4번째 문자 p를 s로, 6번째 문자 t를 m으로 바꾸면 Q가 된다. 따라서 P와 Q 사이의 거리는 3이다. A, B, C를 같은 길이의 문자열이라 하자. 이 때 어떤 문자열 W의 반경 r(W)는 문자열 W와 문자열 A, B, C와의 거..

2009 정보올림피아드 지역본선 문제 Review (4)

복불복 1박2일 제작진은 다음과 같은 새로운 복불복 게임을 제안하였다. 먼저 게임을 하는 한 사람에게 K개의 조약돌을 주고, 숫자가 적혀있는 회전판을 N번 돌리게 한다. 게임을 하는 사람은 회전판을 돌려서 나오는 숫자만큼의 조약돌을 제작진에게 되돌려 주어야 한다. 회전판을 N번 돌리는 동안 제작진에게 줄 수 있는 조약돌이 있으면 게임을 하는 사람이 이기게 되고, 제작진에게 주어야 하는 조약돌이 모자라게 되면 게임에서 지게 된다. 회전판에는 T개의 숫자가 그려지고, 그려지는 숫자는 0 이상 T-1 이하의 정수 중 하나이다. 회전판에 사용되는 정수는 중복 사용이 가능하고, 0부터 T-1 사이의 정수 모두가 다 회전판에 나타나야 하는 것은 아니다. N과 K, 그리고 T와 회전판에 그려진 모든 숫자가 주어질 때..

2009 정보올림피아드 지역본선 문제 Review (3)-3

이 포스트에서는 지난번에 올린 소스 코드가 어떤 식으로 구성되었는지 설명해 보겠다. (참 빨리 올린다...=_=;) 사실 문제를 풀 만한 사람이라면 설명할 필요조차 없는 문제와 코드였다. 문제의 단서는 여기에 있다. 주어진 논을 N × N 행렬로 볼 때 형이 특정 열에서 할당받는 구역의 개수는 바로 왼쪽 열에서 받은 구역의 개수보다 크거나 같아야 한다.문제에서는 이것이 제약조건처럼 나왔다. 하지만 만약 이 조건이 없다면 최적의 조건을 찾기 위해서는, 프로그램은 위-아래로 나누는 모든 경우를 읽어야 한다. 만약 그렇다면 1열을 1개, 2개, …, n개까지 나누는 각각에 대해 2열을 1개, 2개, …, n개까지 나누고, 그런 작업을 n열에 이르기까지 했어야 한다. 각 열마다 동생에게 할당되는 칸(위에서부터 ..

2009 정보올림피아드 지역본선 문제 Review (3)-2

지난번에 문제를 3번까지 올리다 만 사실조차 까먹고 말았다가 이제 깨달았다. 알고 보니 내 컴퓨터에도 문제를 풀어 놓은 소스가 없었다. (난 뭐-_-지 ㅜㅠ) 시험기간 중간에 낀 주말이지만, 무시하고 지나가기에는 너무 큰 문제라서 손을 대기로 했다. 그리고 코딩 따위를 금방 끝냈다. #include #include #include char table[20][20]; char solution[20], solving[20]; int total = 0; int size; int diff_now, diff_best; void tablein(); void divide(char col); void checknow(); void makesol(); int uppersum(); void finish(); int mai..

네이버 블로그 포스트 내용을 plain text로 보기.

(이 글에는 쓰이는 시점의 네이버 블로그 시스템이 반영되어 있으므로, 여기서 소개하는 지침은 나중에 사용 불가능할 수도 있습니다.) 저작권을 준수하는 사람으로서 이런 걸 올리면 안 되지만, 기본적인 (X)HTML 예의마저 안 지키는 네이버는 종종 엿먹이고 싶은 상대다. 일단 마우스 우클릭 방지 스크립트를 무력화하는 프로그램에는 IETOY Spell 알툴바-_- 등등이 있다. 최근에 네이버에서 이것들을 거의 모두 막았다. 자바스크립트에서는 아래 툴이 잘 알려져 있다. 물론 이걸 무력화시키기도 한다. javascript: function r(d) { d.on-contextmenu=null; d.on-selectstart=null; d.on-dragstart=null; d.on-keydown=null; d.o..

환타 오목 게임 재구성: 최종본.

지환태 님의 오목 게임 소스를 처음 접한 것은 올해 중순이었을 겁니다. 오목을 만들어 보겠다는 생각 자체를 하지 않았기 때문에 당연히 소스에 관심이 갔고, 소스 자체가 그다지 깔끔하지 못해서 리팩토링(refactoring)을 해 보고 싶었습니다. (환타[지환태] 님께서도 C언어를 배운지 얼마 안 되었을 때 만들었다고 고백하셨습니다.) 처음엔 허락도 받지 않고 시작한 재구성인데 환타 님께서 관심을 가져 주셨으며, 다섯 번에 걸친 재구성(R1, R2, R3, R4, R5)과 추가 수정으로, 나름 깔끔한 코드를 만들어 봤습니다. 아래가 드디어 최종본입니다. 제가 만든 코드는 하나의 메인 C 파일과 두 헤더 H 파일로 이루어져 있습니다. 지난번 재구성에 비해 소스와 파일명이 아주 약간 달라졌습니다. #inclu..

환타 오목 게임 재구성. (5)

드디어 check()를 줄일 아이디어를 구체화시켰습니다.-_- 현재 방식 그대로라면 모듈로 분리한다 해도 거의 아무런 차이가 없으므로, 아예 검사 방식 자체를 바꾸려고 했습니다만 그게 잘 안 되고 있었습니다. 뻘소리를 좀 하자면 오늘은 2010 수능 D-day이면서 2011 수능 D-364 즉 52주... 어차피 블로깅이 많이 줄었지만 앞으로 1년간 거의 잠수 탈 것 같습니다. 새로운 검사 방식을 소개합니다. 1. 검사 방식에 있어서 생긴 차이는 아닙니다만, 일단 check()는 x와 y 인자만 받습니다. turn 인자가 필요한데, (x, y) 인자를 정상적으로 받았다고 가정하면, board[x][y]가 turn 인자와 같습니다. 즉, int check(int x, int y, int turn) { in..