'Levenshtein Distance 알고리즘'과 '한글 초성, 중성, 종성 분리'에 대해서 다뤘었는데요. 이 두 내용을 결합해서 Levenshtein Distance 알고리즘에서 한글을 사용할 수 있게 변경해보려해요. 우선 Levenshtein Distance 에서 한글을 썼을 때 문제가 되는 부분은 '수정(modify)' 연산인데요. 영어 알파벳과 달리 한글은 초성, 중성, 종성으로 이루어져있기 때문이예요. '햇볕' -> '해변' 으로 수정하는 비용과 '태양' -> '기차' 로 수정하는 비용을 서로 다르게 보는거죠. 그래서 기존 Levenshtein Distance 알고리즘의 수정연산에서 한글 글자를 초성, 중성, 종성으로 분리해서 얼만큼 바꿔야하는지 비용을 계산하는 부분이 새로 추가된다고 보시면 ..
Java
개발하면서 한글 문자를 초성, 중성, 종성으로 분리해야할 필요가 생겼는데요. 구글링하면서 알게된 내용을 정리해보려해요. 우선 한글은 유니코드라는 글로벌하게 약속된 체계에 의해 고유한 식별값이 부여되어 있는데요. '가' 라는 글자는 44032 이고, '힣' 이라는 글자는 55203 으로 할당되어 있어요. 그런데 이 식별값이 그냥 부여된 게 아니라는 것이 중요한 포인트입니다. 바로 완전한글 결합공식 에 의해 생성된 식별값이였던거죠!!! (초성 인덱스 * 21 + 중성 인덱스) * 28 + 종성 인덱스 + 0xAC00 0xAC00(44032) 은 유니코드 체계에서 한글이 시작되는 지점으로 '가' 를 나타내요. 위 공식에 쓰이는 초성, 중성, 종성 배열은 아래와 같아요. 초성 배열(19개)"ㄱ", "ㄲ", ..

Java8 의 Stream 에 대해 알고는 있지만 제대로 써 본적이 없었는데 망나니 개발자님 블로그를 보다가 Stream API 연습문제 풀이 글이 있어서 문제들을 풀어보았다. 1번 문제 모음 [데이터]이름, 취미, 소개김프로, 축구:농구:야구, 구기종목 좋아요정프로, 개발:당구:축구, 개발하는데 뛰긴 싫어앙몬드, 피아노, 죠르디가 좋아요 좋아좋아너무좋아죠르디, 스포츠댄스:개발, 개발하는 죠르디 좋아박프로, 골프:야구, 운동이 좋아요정프로, 개발:축구:농구, 개발도 좋고 운동도 좋아 [문제 1]위와 같은 데이터를 조회하여 각 취미를 선호하는 인원이 몇 명인지 계산하여라.users.stream() .flatMap(user -> user.getHobbies().stream()) ..