Korean builds the past out of a single piece: the infix -았- / -었- / -였-, glued in between the verb stem and whatever ending follows. This is the reframing English speakers most need — where English keeps a shelf of irregular pasts (go → went, buy → bought, eat → ate), Korean has one past infix that attaches to every verb, and it is selected by the same ㅏ/ㅗ harmony rule you already use for the present. Learn 가요 → 갔어요 and the pattern transfers to the whole language; there is no separate "went" to learn. This page lays out the selection rule, the full four-level formation table, and the vowel-boundary contractions that trip beginners up.
The selection rule: harmony picks the shape
The three shapes are not random — they mirror the ㅏ/어 harmony that governs the present:
- Stem's last vowel is ㅏ or ㅗ → -았-: 가다 → 갔-, 좋다 → 좋았-, 살다 → 살았-, 받다 → 받았-.
- Everything else (ㅓ, ㅜ, ㅡ, ㅣ, ㅔ …) → -었-: 먹다 → 먹었-, 마시다 → 마셨-, 있다 → 있었-.
- 하 always → -였-, which contracts to 했: 하다 → 했-, 공부하다 → 공부했-.
Then the ending attaches on top of the infix. In 해요체 that ending is -어요, so the ㅆ of the infix and the 어 come together: 먹었 + 어요 → 먹었어요.
Full formation table: past across four speech levels
Columns run most-formal to least. The everyday default — reach for it first — is 해요체.
| Verb (stem type) | Past stem | 합니다체 (formal) | 해요체 (informal-polite) | 반말 (intimate) | 한다체 (plain/written) |
|---|---|---|---|---|---|
| 가다 — ㅏ/ㅗ stem | 갔- | 갔습니다 gatseumnida | 갔어요 gasseoyo | 갔어 gasseo | 갔다 gatda |
| 좋다 — ㅗ stem | 좋았- | 좋았습니다 joatseumnida | 좋았어요 joasseoyo | 좋았어 joasseo | 좋았다 joatda |
| 살다 — ㅏ stem (ㄹ) | 살았- | 살았습니다 saratseumnida | 살았어요 sarasseoyo | 살았어 sarasseo | 살았다 saratda |
| 받다 — ㅏ stem (batchim) | 받았- | 받았습니다 badatseumnida | 받았어요 badasseoyo | 받았어 badasseo | 받았다 badatda |
| 먹다 — other stem | 먹었- | 먹었습니다 meogeotseumnida | 먹었어요 meogeosseoyo | 먹었어 meogeosseo | 먹었다 meogeotda |
| 마시다 — other (contracts) | 마셨- | 마셨습니다 masyeotseumnida | 마셨어요 masyeosseoyo | 마셨어 masyeosseo | 마셨다 masyeotda |
| 있다 — other stem | 있었- | 있었습니다 isseotseumnida | 있었어요 isseosseoyo | 있었어 isseosseo | 있었다 isseotda |
| 하다 — 여 → 해 | 했- | 했습니다 haetseumnida | 했어요 haesseoyo | 했어 haesseo | 했다 haetda |
Notice that the harmony choice and the contraction are settled once, in the past stem; after that, the same past stem carries every speech level. Only the outer shell (-습니다 / -어요 / -어 / -다) changes.
어제 친구랑 홍대에서 놀았어요.
eoje chingurang Hongdae-eseo norasseoyo
I hung out in Hongdae with a friend yesterday.
점심에 김밥을 먹었어요.
jeomsime gimbabeul meogeosseoyo
I had gimbap for lunch.
주말에 뭐 했어요?
jumare mwo haesseoyo?
What did you do over the weekend?
여행 어땠어요? 정말 좋았어요.
yeohaeng eottaesseoyo? jeongmal joasseoyo
How was the trip? It was really great.
회의는 잘 끝났습니다.
hoe-uineun jal kkeunnatseumnida
The meeting wrapped up well. (formal)
The vowel-boundary contraction
The one place learners stumble is a vowel stem meeting the infix. When the stem already ends in a vowel, the stem vowel and the infix fuse into a single block — exactly the same contraction that happens in the 해요체 present. You never write both blocks out.
| Stem + infix | Contracts to | 해요체 past | Reading |
|---|---|---|---|
| 가 + 았 | 갔 | 갔어요 | gasseoyo |
| 오 + 았 | 왔 | 왔어요 | wasseoyo |
| 서 + 었 | 섰 | 섰어요 | seosseoyo |
| 마시 + 었 | 마셨 | 마셨어요 | masyeosseoyo |
| 되 + 었 | 됐 | 됐어요 | dwaesseoyo |
| 배우 + 었 | 배웠 | 배웠어요 | baewosseoyo |
| 하 + 였 | 했 | 했어요 | haesseoyo |
The high-value takeaway hides in the last few rows: every contraction you already fought through for the present carries over unchanged. 마시다 is already 마셔요 in the present, so the past is just 마셔 + ㅆ어요 → 마셨어요. 되다 → 돼요 → 됐어요. You never re-contract from scratch.
아침에 커피를 두 잔이나 마셨어요.
achime keopireul du janina masyeosseoyo
I drank two whole cups of coffee this morning.
친구가 방금 집에 왔어요.
chinguga banggeum jibe wasseoyo
My friend just got home.
어제는 너무 피곤해서 일찍 잤어요.
eojeneun neomu pigonhaeseo iljjik jasseoyo
I was so tired yesterday that I went to bed early.
One marker, every subject
Korean verbs do not agree with the subject, so there is exactly one past form for all persons. 갔어요 is "I went," "you went," "she went," and "they went" — the verb never changes shape for who did it.
저도 갔어요. 친구도 갔어요.
jeodo gasseoyo. chingudo gasseoyo
I went too. My friend went too. (same form, different subjects)
In 한다체 plain-style narration — diaries, novels, reports — the past is simply the -았/었다 column, and here the action-verb past does not add the 는다 of the plain present. The past plain form is just 갔다, 먹었다, 했다.
그는 문을 열고 조용히 밖으로 나갔다.
geuneun muneul yeolgo joyonghi bakkeuro nagatda
He opened the door and quietly went outside. (plain narration)
Boundary note: the remote past -았/었었-
You will meet a doubled infix, -았었- / -었었-, and it is not just a stronger past. It marks a discontinued or remote past — an event that is finished and no longer holds. 갔어요 = "I went (and that's the relevant fact)"; 갔었어요 = "I had gone (but I'm no longer there / it's been undone)." Reserve it for that severed-from-now feeling; for a plain "I did X," the single infix is correct.
예전에 서울에 살았었어요. 지금은 부산에 살아요.
yejeone Seoure sarasseosseoyo. jigeumeun Busane sarayo
I used to live in Seoul. Now I live in Busan. (discontinued past)
Common Mistakes
1. Not contracting a vowel stem. 가 + 았 fuses into one 갔 — you never write both blocks.
❌ 어제 학교에 가았어요.
Not contracted — 가 + 았 fuses to 갔: 갔어요.
✅ 어제 학교에 갔어요.
eoje hakgyo-e gasseoyo
I went to school yesterday.
2. Wrong harmony — reaching for 았 after a ㅓ/ㅜ/ㅣ stem. 먹 has ㅓ, so it takes 었, not 았.
❌ 점심에 밥을 먹았어요.
Wrong harmony — 먹 has ㅓ (not ㅏ/ㅗ), so it takes -었-: 먹었어요.
✅ 점심에 밥을 먹었어요.
jeomsime babeul meogeosseoyo
I ate lunch.
3. Conjugating 하다 regularly. 하다's past is the fused 했 (하 + 였 → 했), never ×하았어요.
❌ 어제 공부하았어요.
Wrong — 하다's past is 했: 공부했어요.
✅ 어제 공부했어요.
eoje gongbuhaesseoyo
I studied yesterday.
4. Over-marking a plain past as -았었-. For a neutral "I went," use one infix (갔어요). The doubled 갔었어요 says "had gone (and it's undone)" — a different meaning, not a stronger past.
❌ 어제 부산에 갔었어요.
Over-marked for a simple past — 갔었어요 implies 'had gone (and came back)'; for plain 'went' use 갔어요.
✅ 어제 부산에 갔어요.
eoje Busane gasseoyo
I went to Busan yesterday.
Key Takeaways
- The past is one infix — -았/었/였- — slotted in before the ending; there is no irregular past stem to memorize per verb.
- Selection follows the same ㅏ/ㅗ harmony as the present: 갔-, 좋았-, 살았- (ㅏ/ㅗ) vs 먹었-, 마셨-, 있었- (else); 하 → 했.
- Vowel stems contract at the boundary (갔어요, 왔어요, 마셨어요, 됐어요), and every present-tense contraction carries over free.
- Shortcut: 해요-form − 요 + ㅆ어요. One form for all subjects — no agreement.
- The doubled -았었- is a discontinued/remote past, not a plain one.
Now practice Korean
Reading grammar gets you part of the way. The exercises are where it sticks — free, no signup needed.
Start learning Korean→Related Topics
- The 아/어 Vowel-Harmony Selection TableTOPIK 1 — The master lookup sheet for choosing 아 vs 어 in every harmony-sensitive ending: if the stem's last vowel is ㅏ or ㅗ, use 아; for everything else use 어; 하 alone takes 여 → 해.
- The Vowel-Contraction TableTOPIK 1 — The obligatory stem-vowel + 아/어 fusions that produce every 해요체 and past form — 가+아→가, 오+아→와, 주+어→줘, 마시+어→마셔 — plus the 되/돼 spelling test. The uncontracted forms are simply wrong.
- Present-Tense Formation TableTOPIK 1 — The present (non-past) across all four speech levels and both predicate classes — 합니다체 / 해요체 / 반말 / 한다체 — with the key split that verbs take -ㄴ다/는다 in 한다체 but adjectives stay bare -다 (간다 vs 좋다).
- Future & Intention: -겠 and -(으)ㄹ 것이다 TableTOPIK 2 — Korean has no single word 'will' — it splits the future between the infix -겠- (on-the-spot intention and conjecture: 가겠어요, 비가 오겠어요) and the periphrastic -(으)ㄹ 것이다 (planned future and prediction: 갈 거예요). This table lays both out across speech levels, flags the 으-insertion, and pins down which nuance goes where.
- The Past Tense -았/었어요TOPIK 1 — The past marker -았/었- slots in before the ending, chosen by the same ㅏ/ㅗ vowel harmony as the present. The shortcut that makes it nearly free: take your 해요-form, drop 요, and add ㅆ어요 — 가요→갔어요, 마셔요→마셨어요, 해요→했어요.