There are technically 11,000 characters, but 2,300 characters cover 99.9% of the most used ones. So for the map/array I would have a map that contains the hangul characters like,한, for the key and the transliteration as han. I could also use the unicode decimal number to act as a key in a string array. The shear number of syllables and setting up the map/array seems like it would be extremely tedious.
The characters are made up letters sort of so you can create the transliteration without having to look anything up. Right now I wrote the code for that. For the most part it covers everything except maybe a few edge that I need to handle once I figure out how to determine them.
What I have now(calculation method) is this:
I made it go backwards through the string because I thought handling the edge cases might be easier. Once I figure out the grammar I can just add a helper method to sort it out.
I also wasn't sure about making the Stringbuilders global variables. I made them global variables so they only have to be created one time instead of for every single character, and i think stringbuilder is threadsafe.