2012년 12월 29일 토요일

영재원 실습

3D 관련쪽으로 들어가려 했는데 3DS MAX 2009를 가르쳐주네요;; 뭐 나쁘진 않으니

지금 영재원이라서 많이 못 쓰니 이만 줄이겠습니다.

2012년 12월 23일 일요일

한글 입력 이론 (1)

제가 이번에 한글 변환기(예를 들면 dkssud안녕으로 바꿔주는 기계)에 해당하는 함수를 만들 필요성을 느껴서 만들기로 했는데,
예제가 전부 말이 아니고 어떤 건 유료인 것까지 있어서 제가 그냥 강좌를 쓰기로 했습니다. (한글 오토마타라고 하나요?)
초기에 만든 것(주의! 예전 블로그인 네이버로 갑니다.)은 haansoft 뿐만 아니라 모든 자음분할, 모음분할자에 문제가 있어서 새로 만든 겁니다.

예전 알고리즘은 뭐였냐면 모든 완성자는 초성이 반드시 한 번을 입력한다.의 원리를 이용한 겁니다.
예를 들어 dkssud이 있으면, 뒤에서부터 읽어가며, 자음을 봅니다.
(편의상 자음을 파란색, 모음을 빨간색으로 표시하겠습니다.)
dkssud에서 두 번째부터 첫 자음을 초성으로 처리합니다. (초성은 검은색)
dkssud
이제 분리가 되었죠. 이게 바꾸는 원리였는데
원리를 보니 왜 자음분할, 모음분할자에 문제가 있는지 알겠죠.
그래서 이번 알고리즘은 일정한 문자를 보고 입력원리를 그대로 적용합니다!

자음분할자로 해 보겠습니다. 으-음... 예제는
rsefkiju로 해 보겠습니다. 끊는 위치를 찾는 겁니다.
끊는 위치만 찾으면 그 다음부터는 쉬우니까요.
1) 먼저 자음 = 0, 모음 = 1을 넣습니다.
특수문자가 보이면 바로 끊습니다.
r
s
e
f
k
i
j
u
0
0
0
0
1
1
1
1
어이구 표 한번 그리기 진짜 힘드네
2) 이제부터
초성 = 0
앞에 초성이 없는 중성 = 1
합성 가능한 종성 = 2
초성이 있는 중성 = 3
포화상태의 종성 = 4
이라고 합시다.
다음 진리표에 따라 값을 채웁니다.
전 값이 없으면 그대로 둡니다.
전 값
현 값
행동 요령(값)
0
0
그 곳에서 끊음
0
1
3
1
0
그 곳에서 끊음
1
1
합쳐지지 않으면 끊음
2
0
합쳐지면 4 아니면 끊음
2
1
그 전 곳에서 끊음
3
0
2
3
1
합쳐지면 3 아니면 끊음
4
0
그 곳에서 끊음
4
1
그 전 곳에서 끊음
이렇게 하면 되겠죠. 옛한글이라면 입력기가 어떻게 되었을까 생각도 드네요.
이 예제는 채우다 중간에서 끊기네요. r과 s 사이에서 끊기네요.

조금 더 좋은 예제로 해봅시다.
qnpfrz로 해 봅시다.
q
n
p
f
r
z
0
1
1
0
0
0
이렇게 됩니다. 그 다음에 시도해 보면, (시도 중인 건 빨간색으로 표시합니다)
q
n
p
f
r
z
0
3
1
0
0
0
첫 번째 n입니다. 0-1이므로 3으로 값을 바꿉니다.
q
n
p
f
r
z
0
3
3
0
0
0
두 번째 p인데, 3-1 조합에서 n과 p는 합쳐지므로(ㅞ로 합쳐짐) 3으로 바꿉니다.
q
n
p
f
r
z
0
3
3
2
0
0
세 번째 문자 조합에서 3-0이므로 2로 바뀝니다.
q
n
p
f
r
z
0
3
3
2
4
0
네 번째 문자 조합에서, 2-0 조합인데 합쳐지므로(ㄺ) 값을 4로 바꿉니다.
q
n
p
f
r
z
0
3
3
2
4
0
다섯 번째의 문자 조합 4-0은 그 곳에서 끊습니다. 즉 'qnpfr' 'z'로 끊기는 겁니다.
이 문자열을 변환하여 합치는 알고리즘은 유니코드를 조금만 해 보셨다면 금방 알 수 있습니다.
바꾸면 '뷁' 'ㅋ'입니다.
즉 주어진 문자열은 '뷁ㅋ'가 되는 것입니다.

(이번 강의는 잘 썼나요?)

다음에는 이것을 구현하는 코드를 같이 보도록 하겠습니다. 이 알고리즘을 구현하기 위해서는 버퍼라는 게 필요한데, 그것도 설명하도록 하겠습니다.

2012년 12월 16일 일요일

블로그

하기 정말 힘든 것 같음 ;;

기말 패망했다는 건 여기 안 적을 거임