Does Sebeolsik really take fewer keystrokes than Dubeolsik?
Written August 2026
"The three-set Korean layout needs fewer keystrokes" is a claim you hear often, but a measurement of how many fewer is hard to find. So I calculated it. The first answer was 2% fewer. After checking what the layouts actually place on a key, the difference all but disappeared. Below is the method, the evidence, and exactly which assumption of mine was wrong.
Dubeolsik: two to five presses per syllable
A Dubeolsik keyboard carries only consonants and vowels. Korean assembles those into syllable blocks, so the number of presses varies from syllable to syllable.
가 is ㄱ+ㅏ, two presses. 간 is ㄱ+ㅏ+ㄴ, three. 값 needs the compound final ㅄ typed as ㅂ then ㅅ, so four, and 꽝 is ㄲ (shifted, one press) + ㅗ + ㅏ + ㅇ, also four. The worst case looks like 뷁: ㅂ+ㅜ+ㅔ+ㄹ+ㄱ, five presses.
The distinction that trips people up is tense consonants versus compound finals. ㄲ ㄸ ㅃ ㅆ ㅉ are shifted keys, so they arrive in one press. ㄳ ㄵ ㄶ ㄺ and friends require two different keys, so they cost two. In the Unicode final-consonant order, ㄲ (one press) sits directly beside ㄳ (two), which means there is no shortcut — all 28 positions have to be checked individually.
The assumption I got wrong
On a Sebeolsik layout the initial consonant, vowel and final consonant each occupy their own region of the keyboard. From that I reasoned: "then the compound vowels and compound finals must have their own keys too, so a syllable is two presses without a final and three with one."
Under that assumption Dubeolsik averages 2.51 presses per character and Sebeolsik 2.46 — a 2% difference. It even had a tidy closed form: the Sebeolsik average came out as exactly 2 + the share of syllables carrying a final. That made it look right.
But I had reasoned it, not checked it. So I went and looked at what the layouts actually contain.
| Layout | Initial keys | Vowel keys | Final keys | Presses per syllable |
|---|---|---|---|---|
| Dubeolsik (2-set) | 19 | 21 | 27 | 2–5 |
| Sebeolsik Final (3-91) | 14 | 15 | 27 | 2–5 |
| Sebeolsik 390 | 14 | 15 | 21 | 2–6 |
A jamo with its own key costs one press; one without has to be composed, so it costs two. Dubeolsik's 19 initials are all one press because the tense consonants sit on shifted keys. Sebeolsik Final has only 14 initials, so ㄲ ㄸ ㅃ ㅆ ㅉ are made by pressing the plain consonant twice, and only 15 vowels, so ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ also cost two (ㅢ is the one compound vowel with a key). In exchange all 27 finals have keys, which makes every one of the eleven compound finals a single press. A shifted key counts as one press on all three layouts.
Reading the layout definitions instead of the documentation
Rather than trusting a prose description, I looked at a working implementation. libhangul is the standard Korean input library behind ibus-hangul and Nabi, and it defines each keyboard as XML: hangul-keyboard-3f.xml for Sebeolsik Final, hangul-keyboard-39.xml for Sebeolsik 390.
Counting the jamo actually placed on keys in Sebeolsik Final: 14 initials (ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ). The tense initials ㄲ ㄸ ㅃ ㅆ ㅉ have no key. Only 15 vowels, with ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ absent and ㅢ the sole compound vowel present. All 27 finals, however, are there — every compound final has a dedicated key.
So my assumption was half right. The compound finals were correct, the compound vowels were wrong, and the tense initials were something I had never thought to check at all.
Jamo without a key are built through composition rules. hangul-combination-default.xml defines ㄱ+ㄱ=ㄲ, ㅗ+ㅏ=ㅘ and the rest. That means a tense initial on Sebeolsik Final costs two presses, while on Dubeolsik it costs one. On that item the three-set layout is the slower one.
The conclusion is that "Sebeolsik is always two or three presses" does not hold. Sebeolsik Final also spans two to five, and 390 reaches six because it has fewer compound-final keys.
Cross-checking against an unrelated implementation
Resting the result on one library felt thin, so I looked for an implementation with no shared lineage. macOS ships Sebeolsik keylayouts of its own: inside KoreanIM.app there are 3SetHangul.keylayout (Sebeolsik Final) and 390Hangul.keylayout (Sebeolsik 390), in Apple's proprietary format, sharing no code with libhangul.
I compared the key position of every jamo across both definitions. Sebeolsik Final: 56 jamo on each side, 56 in common, zero position mismatches. Sebeolsik 390: 50 on each side, zero mismatches. Even the detail that ㅗ and ㅜ each appear on two separate keys matched.
Apple's layout has no key for ㄲ ㄸ ㅃ ㅆ ㅉ either — neither unshifted nor shifted. Two independent implementations agreeing means the double-press behaviour is no longer an assumption.
One thing surfaced along the way: all eleven compound finals on Sebeolsik Final sit on shifted keys. That makes the convention of counting a shifted key as one press decisive for this comparison. Count shift as two and Sebeolsik loses its compound-final advantage — and Dubeolsik loses its tense-consonant advantage at the same time.
| Measurement | Dubeolsik (2-set) | Sebeolsik Final (3-91) | Sebeolsik 390 |
|---|---|---|---|
| 183-syllable sample, total | 459 | 460 | 460 |
| Sample, per syllable | 2.508 | 2.514 | 2.514 |
| All 11,172 syllables, equal weight | 3.690 | 3.513 | 3.727 |
The sample is the five Korean practice passages used on this site. The third row weights every syllable equally, so it is not Korean frequency — syllables that exist in the dictionary but almost never appear in a sentence pull the average around.
Recalculating: 459 presses versus 460
One press if the jamo owns a key, two if it must be composed. I generated the initial, vowel and final tables for all three layouts straight from the XML rather than transcribing them, which removes any chance of a copying error.
The result flipped. Over the five Korean passages on this site (183 syllables), Dubeolsik came to 459 presses and Sebeolsik Final to 460. The three-set layout is one press worse.
The reason is two effects cancelling. Compare two syllables: 값 drops from four presses to three on Sebeolsik (compound-final gain), while 꽝 rises from four to five (tense-initial loss). 뷁 drops from five to four, again thanks to the compound final.
Counted exactly, the sample cancels out like this. Seven syllables carry a tense initial, costing Sebeolsik seven extra presses. Four carry a compound final, saving four. Two contain ㅢ, saving two. Seven minus four minus two is one — precisely the observed difference. Tense consonants simply outnumbered compound finals in this text.
Equal weighting favours Sebeolsik, and that is the trap
Average over all 11,172 modern Hangul syllables with equal weight and the picture changes again: Dubeolsik 3.690 presses, Sebeolsik Final 3.513 — a 4.8% advantage for the three-set layout. Sebeolsik 390 comes to 3.727, about 1.0% worse than Dubeolsik.
But that number counts 뷁 and 꿽 as heavily as 가 and 이. It is not Korean frequency. Syllables built from compound finals are plentiful in the syllabary and nearly absent from real sentences.
A sharper figure makes the point. Of the 11,172 syllables, 1,700 cost more on Sebeolsik Final than on Dubeolsik. Every single one turns out to carry a tense initial, and the arithmetic confirms it exactly: 5 tense initials × 17 non-compound finals × 20 non-ㅢ vowels = 1,700. Tense consonants are far more common in real writing than compound finals are.
So which layout takes fewer keystrokes genuinely depends on what you are typing, and for ordinary prose the difference is close to nothing. The advantages usually claimed for Sebeolsik — shorter finger travel, alternating hands, no re-segmentation artefacts while typing — may well hold, but raw keystroke count is not the evidence for them.
What I could not verify
Some of these numbers rest on things I did not confirm. Stating them plainly.
The sample is small. Across 183 syllables, only thirteen events created any difference between the layouts: four compound finals, two ㅢ, and seven tense initials. A larger corpus could move the figure.
The shift convention drives the result. I followed what Korean typing programs and certification exams use, but an argument that shift should count as two presses — closer to actual effort — is defensible and would change the comparison.
Documented figures do not match the implementations. Sebeolsik Final is described as "58 letters on 39 keys", yet both implementations place 56 Hangul jamo. Sebeolsik 390's compound finals are documented as seven, while both implementations carry five (ㄶ ㄺ ㄻ ㅀ ㅄ). Since the implementations agree with each other, the documentation appears to describe a different revision or a different way of counting, but I could not establish which.
Syllables mid-composition count as one press. A partially typed block — an initial alone, or initial plus vowel — arrives as a compatibility jamo rather than a precomposed syllable, and is currently lumped in at one press.
The methodology lesson
This is the uncomfortable part, so it gets its own section. Here is how I "verified" the original, wrong code: check that Dubeolsik always falls between two and five presses — passed. Check that Sebeolsik is always three presses with a final and two without — passed. Check whether any syllable costs more on Sebeolsik than on Dubeolsik — zero found.
The second check validated my assumption using my assumption, so it could not fail. The third was the same mistake wearing a different hat: having capped Sebeolsik at three presses, it was arithmetically incapable of exceeding Dubeolsik's five. Run that same check against the corrected tables and the answer is not zero but 1,700.
An invariant derived from the code under test verifies nothing. The reference has to come from outside it. Here that reference was a pair of keyboard definition files written by people who had never heard of this project.
Compare them yourself
The typing test lets you switch between Dubeolsik, Sebeolsik Final and Sebeolsik 390 and re-score the same run against each layout.
Open the typing test