<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>YM 학원</title>
    <link>https://ymedu.tistory.com/</link>
    <description>서울 성북구 보문동 6가 YM학원, 원장님 1인이 학생별 생기부 상담부터 고등 영어 1:1 수업까지 체계적이고 직접 책임지는 맞춤형 학원입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 3 Jul 2026 03:53:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>team YM</managingEditor>
    <image>
      <title>YM 학원</title>
      <url>https://tistory1.daumcdn.net/tistory/2049115/attach/af44ebf53aad47b7b7c9e152b5c77570</url>
      <link>https://ymedu.tistory.com</link>
    </image>
    <item>
      <title>동성중3 국어대비</title>
      <link>https://ymedu.tistory.com/395</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot;&gt;
&lt;meta name=&quot;theme-color&quot; content=&quot;#40204d&quot;&gt;
&lt;title&gt;YM 중3 국어 음운 체계&lt;/title&gt;
&lt;style&gt;
:root{--ink:#211d28;--muted:#716878;--line:#ded6e4;--paper:#fffdf8;--bg:#f2eef6;--deep:#40204d;--accent:#d56b49;--good:#227a55;--bad:#b33f4b;--soft:#f7f1e8;--shadow:0 14px 32px rgba(64,32,77,.13)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{background:radial-gradient(circle at 100% 0,rgba(213,107,73,.18),transparent 25rem),var(--bg);color:var(--ink);font-family:&quot;Pretendard&quot;,&quot;Noto Sans KR&quot;,&quot;Malgun Gothic&quot;,system-ui,sans-serif;font-size:17px;line-height:1.5}button,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}.app{width:min(100%,760px);min-height:100svh;margin:auto;background:var(--paper)}header{position:sticky;top:0;z-index:20;padding:10px 12px;background:rgba(255,253,248,.95);border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}.top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.brand{border:0;background:transparent;color:var(--deep);text-align:left;display:flex;gap:10px;align-items:center}.mark{display:grid;place-items:center;width:40px;height:40px;border-radius:13px;background:var(--deep);color:white;font-weight:950}.brand b{display:block;font-size:18px}.brand small{display:block;color:var(--muted);font-size:11px;font-weight:850}.ghost{border:1px solid var(--line);background:white;color:var(--deep);font-weight:950;border-radius:12px;padding:9px 11px}.controls{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:9px}.select{min-height:42px;border:1px solid var(--line);border-radius:10px;background:white;color:var(--deep);font-weight:900;padding:0 10px}.tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}.tab{min-height:40px;border:1px solid var(--line);border-radius:10px;background:white;color:var(--deep);font-weight:950}.tab.active{background:var(--deep);border-color:var(--deep);color:white}main{padding:14px 12px 28px}.hero{padding:8px 2px 16px}.eyebrow{font-size:12px;color:var(--accent);font-weight:950;letter-spacing:1px}.hero h1{margin:6px 0 8px;font-size:clamp(30px,8vw,46px);line-height:1.1}.hero p{margin:0;color:var(--muted)}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:12px 0}.stats div{padding:11px 5px;text-align:center;border-radius:13px;background:var(--deep);color:white}.stats strong{display:block;font-size:22px}.stats span{font-size:11px;opacity:.78}.section{margin:14px 0}.unit-grid{display:grid;gap:9px}.unit{border:1px solid var(--line);background:white;border-radius:16px;padding:14px;text-align:left;box-shadow:0 3px 0 rgba(64,32,77,.04)}.unit.selected{border-color:var(--accent);box-shadow:inset 5px 0 0 var(--accent)}.unit b{display:block;font-size:17px}.unit span{display:block;color:var(--muted);font-size:13px;margin-top:4px}.card{border:1px solid var(--line);border-radius:20px;background:white;box-shadow:var(--shadow);overflow:hidden}.cue{padding:19px 16px;background:linear-gradient(135deg,#f5ecff,#fff5ed);min-height:160px;display:grid;place-items:center;text-align:center}.cue small{display:inline-block;margin-bottom:8px;color:var(--accent);font-weight:950}.term{font-size:clamp(34px,10vw,58px);line-height:1.05;font-weight:950;color:var(--deep)}.body{padding:17px}.body h2{margin:0 0 8px;font-size:24px}.hidden{display:grid;place-items:center;min-height:140px;border:1px dashed #c8b9d2;border-radius:14px;color:var(--muted);font-weight:900;text-align:center;padding:12px}.open{min-height:140px;border-radius:14px;background:var(--soft);padding:15px}.open p{margin:0 0 10px}.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{border-radius:999px;background:#eee4f2;color:var(--deep);font-size:12px;font-weight:950;padding:5px 8px}.nav{display:grid;grid-template-columns:52px 1fr 52px;gap:8px;margin-top:10px}.primary,.secondary,.nav button{min-height:45px;border-radius:12px;font-weight:950}.primary{border:0;background:var(--accent);color:white}.secondary,.nav button{border:1px solid var(--line);background:white;color:var(--deep)}.quizTop{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.bar{height:8px;border-radius:999px;background:#e9e0ef;overflow:hidden;flex:1}.bar i{display:block;height:100%;width:var(--p);background:var(--accent)}.timer{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--deep);color:white;font-weight:950}.timer.danger{background:var(--bad)}.qcard{padding:16px;border:1px solid var(--line);border-radius:18px;background:white;box-shadow:var(--shadow)}.meta{font-size:12px;color:var(--accent);font-weight:950}.qcard h2{white-space:pre-line;line-height:1.45;font-size:21px;margin:8px 0 16px}.choices{display:grid;gap:9px}.choice{display:grid;grid-template-columns:30px 1fr;gap:10px;align-items:start;width:100%;border:1px solid var(--line);border-radius:13px;background:white;text-align:left;padding:12px;font-weight:850}.choice b{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#f0eaf3;font-size:13px}.choice.correct{border-color:var(--good);background:#edf8f2;color:var(--good)}.choice.wrong{border-color:var(--bad);background:#fff0f1;color:var(--bad)}.choice:disabled{opacity:1}.feedback{margin-top:10px;border-radius:13px;padding:13px;background:var(--soft);font-weight:850}.feedback.ok{background:#edf8f2;color:var(--good)}.feedback.bad{background:#fff0f1;color:var(--bad)}.result{text-align:center;border:1px solid var(--line);border-radius:20px;background:white;box-shadow:var(--shadow);padding:24px 15px}.score{display:grid;place-items:center;width:150px;height:150px;margin:12px auto;border-radius:50%;background:conic-gradient(var(--accent) var(--score),#eee6f1 0);font-size:42px;font-weight:950;color:var(--deep)}.wrongList{text-align:left;margin-top:14px}.wrong{padding:10px 0;border-top:1px solid var(--line);font-size:15px}.toast{position:fixed;left:50%;bottom:24px;z-index:60;transform:translate(-50%,16px);opacity:0;transition:.2s;background:var(--deep);color:white;border-radius:999px;padding:11px 15px;font-size:13px}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:430px){body{font-size:16px}header{padding:8px}.mark{width:35px;height:35px}.brand b{font-size:15px}.brand small{font-size:10px}.ghost{font-size:13px;padding:8px}.controls{grid-template-columns:1fr;gap:5px;margin-top:6px}.select{min-height:36px;font-size:14px}.tabs{gap:4px;margin-top:6px}.tab{min-height:36px;font-size:13px}main{padding:10px 9px 24px}.hero h1{font-size:30px}.cue{min-height:130px}.term{font-size:38px}.body{padding:13px}.qcard{padding:12px;border-radius:15px}.qcard h2{font-size:18px}.choice{font-size:15px;padding:11px}.stats strong{font-size:19px}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;app&quot;&gt;
&lt;header&gt;
  &lt;div class=&quot;top&quot;&gt;
    &lt;button class=&quot;brand&quot; id=&quot;homeBtn&quot;&gt;&lt;span class=&quot;mark&quot;&gt;音&lt;/span&gt;&lt;span&gt;&lt;b&gt;YM 중3 국어 음운&lt;/b&gt;&lt;small&gt;천재(노) 3-1 어법 최난도 대비&lt;/small&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;button class=&quot;ghost&quot; id=&quot;shareTop&quot;&gt;전송&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;controls&quot;&gt;
    &lt;select id=&quot;category&quot; class=&quot;select&quot;&gt;&lt;/select&gt;
    &lt;select id=&quot;countSelect&quot; class=&quot;select&quot;&gt;&lt;option value=&quot;40&quot;&gt;40문항&lt;/option&gt;&lt;option value=&quot;60&quot; selected&gt;60문항&lt;/option&gt;&lt;option value=&quot;80&quot;&gt;80문항&lt;/option&gt;&lt;option value=&quot;all&quot;&gt;전체&lt;/option&gt;&lt;/select&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tabs&quot;&gt;&lt;button class=&quot;tab active&quot; data-mode=&quot;study&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;tab&quot; data-mode=&quot;practice&quot;&gt;연습&lt;/button&gt;&lt;button class=&quot;tab&quot; data-mode=&quot;test&quot;&gt;테스트&lt;/button&gt;&lt;/div&gt;
&lt;/header&gt;
&lt;main id=&quot;screen&quot;&gt;&lt;/main&gt;
&lt;div id=&quot;toast&quot; class=&quot;toast&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
const CATS=[
  [&quot;all&quot;,&quot;전체&quot;],
  [&quot;basic&quot;,&quot;음운 기본&quot;],
  [&quot;vowel&quot;,&quot;모음 체계&quot;],
  [&quot;consonant&quot;,&quot;자음 체계&quot;],
  [&quot;sense&quot;,&quot;어감·언어 차이&quot;],
  [&quot;strategy&quot;,&quot;대표 유형&quot;]
];
const CARDS=[
[&quot;basic&quot;,&quot;음운&quot;,&quot;말의 뜻을 구별해 주는 소리의 가장 작은 단위.&quot;,&quot;물:불은 ㅁ/ㅂ의 차이, 발:불은 ㅏ/ㅜ의 차이로 뜻이 달라진다.&quot;],
[&quot;basic&quot;,&quot;분절 음운&quot;,&quot;자음과 모음처럼 더 작은 소리 단위로 나누어 인식할 수 있는 음운.&quot;,&quot;자음, 모음이 대표적이다.&quot;],
[&quot;basic&quot;,&quot;비분절 음운&quot;,&quot;소리의 길이처럼 자음·모음처럼 나눌 수 없지만 뜻을 구별하는 음운.&quot;,&quot;눈[眼]과 눈ː[雪]처럼 길이에 따라 뜻이 달라질 수 있다.&quot;],
[&quot;basic&quot;,&quot;자음&quot;,&quot;공기의 흐름이 발음 기관의 장애를 받고 나오는 소리.&quot;,&quot;ㄱ, ㄴ, ㄷ, ㅁ, ㅂ 등이 자음이다.&quot;],
[&quot;basic&quot;,&quot;모음&quot;,&quot;공기의 흐름이 장애를 받지 않고 나오는 소리.&quot;,&quot;ㅏ, ㅑ, ㅓ, ㅕ 등이 모음이다.&quot;],
[&quot;basic&quot;,&quot;음운과 문자&quot;,&quot;음운은 심리적인 소리 단위이며 모든 음운이 글자로 표기되는 것은 아니다.&quot;,&quot;소리의 길이, 억양은 글자로 직접 표기하기 어렵다.&quot;],
[&quot;vowel&quot;,&quot;단모음&quot;,&quot;발음할 때 입술 모양이나 혀의 위치가 변하지 않는 모음.&quot;,&quot;ㅏ, ㅐ, ㅓ, ㅔ, ㅗ, ㅚ, ㅜ, ㅟ, ㅡ, ㅣ&quot;],
[&quot;vowel&quot;,&quot;이중모음&quot;,&quot;발음할 때 입술 모양이나 혀의 위치가 변하는 모음.&quot;,&quot;ㅑ, ㅕ, ㅛ, ㅠ, ㅒ, ㅖ, ㅘ, ㅙ, ㅝ, ㅞ, ㅢ&quot;],
[&quot;vowel&quot;,&quot;원순 모음&quot;,&quot;입술을 둥글게 오므려 발음하는 모음.&quot;,&quot;ㅗ, ㅚ, ㅜ, ㅟ&quot;],
[&quot;vowel&quot;,&quot;평순 모음&quot;,&quot;입술을 둥글게 오므리지 않고 발음하는 모음.&quot;,&quot;ㅏ, ㅐ, ㅓ, ㅔ, ㅡ, ㅣ&quot;],
[&quot;vowel&quot;,&quot;고모음&quot;,&quot;혀의 높이가 높은 단모음.&quot;,&quot;ㅣ, ㅟ, ㅡ, ㅜ&quot;],
[&quot;vowel&quot;,&quot;중모음&quot;,&quot;혀의 높이가 중간인 단모음.&quot;,&quot;ㅔ, ㅚ, ㅓ, ㅗ&quot;],
[&quot;vowel&quot;,&quot;저모음&quot;,&quot;혀의 높이가 낮은 단모음.&quot;,&quot;ㅐ, ㅏ&quot;],
[&quot;vowel&quot;,&quot;전설 모음&quot;,&quot;혀의 최고점이 입안의 앞쪽에 있는 단모음.&quot;,&quot;ㅣ, ㅟ, ㅔ, ㅚ, ㅐ&quot;],
[&quot;vowel&quot;,&quot;후설 모음&quot;,&quot;혀의 최고점이 입안의 뒤쪽에 있는 단모음.&quot;,&quot;ㅡ, ㅜ, ㅓ, ㅗ, ㅏ&quot;],
[&quot;vowel&quot;,&quot;ㅣ&quot;,&quot;전설·평순·고모음.&quot;,&quot;앞쪽, 평평한 입술, 높은 혀 위치를 기억한다.&quot;],
[&quot;vowel&quot;,&quot;ㅟ&quot;,&quot;전설·원순·고모음.&quot;,&quot;앞쪽 + 둥근 입술 + 높은 혀 위치.&quot;],
[&quot;vowel&quot;,&quot;ㅡ&quot;,&quot;후설·평순·고모음.&quot;,&quot;뒤쪽 + 평평한 입술 + 높은 혀 위치.&quot;],
[&quot;vowel&quot;,&quot;ㅜ&quot;,&quot;후설·원순·고모음.&quot;,&quot;뒤쪽 + 둥근 입술 + 높은 혀 위치.&quot;],
[&quot;vowel&quot;,&quot;ㅔ&quot;,&quot;전설·평순·중모음.&quot;,&quot;ㅐ보다 혀의 높이가 높다.&quot;],
[&quot;vowel&quot;,&quot;ㅚ&quot;,&quot;전설·원순·중모음.&quot;,&quot;전설이면서 원순인 점이 자주 나온다.&quot;],
[&quot;vowel&quot;,&quot;ㅓ&quot;,&quot;후설·평순·중모음.&quot;,&quot;뒤쪽 + 평순 + 중간 높이.&quot;],
[&quot;vowel&quot;,&quot;ㅗ&quot;,&quot;후설·원순·중모음.&quot;,&quot;뒤쪽 + 원순 + 중간 높이.&quot;],
[&quot;vowel&quot;,&quot;ㅐ&quot;,&quot;전설·평순·저모음.&quot;,&quot;ㅔ보다 혀의 높이가 낮다.&quot;],
[&quot;vowel&quot;,&quot;ㅏ&quot;,&quot;후설·평순·저모음.&quot;,&quot;후설 저모음이다.&quot;],
[&quot;consonant&quot;,&quot;입술소리&quot;,&quot;두 입술 사이에서 나는 소리.&quot;,&quot;ㅁ, ㅂ, ㅃ, ㅍ&quot;],
[&quot;consonant&quot;,&quot;잇몸소리&quot;,&quot;혀끝과 윗잇몸 사이에서 나는 소리.&quot;,&quot;ㄴ, ㄷ, ㄸ, ㅌ, ㄹ, ㅅ, ㅆ&quot;],
[&quot;consonant&quot;,&quot;센입천장소리&quot;,&quot;혓바닥과 센입천장 사이에서 나는 소리.&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;],
[&quot;consonant&quot;,&quot;여린입천장소리&quot;,&quot;혀의 뒷부분과 여린입천장 사이에서 나는 소리.&quot;,&quot;ㄱ, ㄲ, ㅋ, ㅇ&quot;],
[&quot;consonant&quot;,&quot;목청소리&quot;,&quot;목청 사이에서 나는 소리.&quot;,&quot;ㅎ&quot;],
[&quot;consonant&quot;,&quot;파열음&quot;,&quot;공기의 흐름을 막았다가 터뜨리며 내는 소리.&quot;,&quot;ㄱ, ㄲ, ㅋ, ㄷ, ㄸ, ㅌ, ㅂ, ㅃ, ㅍ&quot;],
[&quot;consonant&quot;,&quot;마찰음&quot;,&quot;공기가 흐르는 통로를 좁혀 마찰을 일으키며 내는 소리.&quot;,&quot;ㅅ, ㅆ, ㅎ&quot;],
[&quot;consonant&quot;,&quot;파찰음&quot;,&quot;공기의 흐름을 막았다가 서서히 터뜨리며 마찰을 일으키는 소리.&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;],
[&quot;consonant&quot;,&quot;비음&quot;,&quot;공기를 코로 내보내며 내는 소리.&quot;,&quot;ㅁ, ㄴ, ㅇ&quot;],
[&quot;consonant&quot;,&quot;유음&quot;,&quot;혀끝을 잇몸에 대었다가 떼거나 혀 양옆으로 공기를 흘려 내는 소리.&quot;,&quot;ㄹ&quot;],
[&quot;consonant&quot;,&quot;예사소리&quot;,&quot;소리의 세기가 부드러운 느낌을 주는 소리.&quot;,&quot;ㄱ, ㄷ, ㅂ, ㅈ, ㅅ&quot;],
[&quot;consonant&quot;,&quot;된소리&quot;,&quot;소리의 세기가 강하고 단단한 느낌을 주는 소리.&quot;,&quot;ㄲ, ㄸ, ㅃ, ㅉ, ㅆ&quot;],
[&quot;consonant&quot;,&quot;거센소리&quot;,&quot;소리의 세기가 크고 거친 느낌을 주는 소리.&quot;,&quot;ㅋ, ㅌ, ㅍ, ㅊ&quot;],
[&quot;consonant&quot;,&quot;ㄹ&quot;,&quot;잇몸소리이면서 유음이다.&quot;,&quot;여린입천장소리로 착각하기 쉽다.&quot;],
[&quot;consonant&quot;,&quot;ㅎ&quot;,&quot;목청소리이면서 마찰음이다.&quot;,&quot;파찰음이 아니다.&quot;],
[&quot;consonant&quot;,&quot;ㅆ&quot;,&quot;잇몸소리·마찰음·된소리.&quot;,&quot;조건형 문제에서 자주 정답이 된다.&quot;],
[&quot;consonant&quot;,&quot;ㅌ&quot;,&quot;잇몸소리·파열음·거센소리.&quot;,&quot;ㄷ의 거센소리 계열이다.&quot;],
[&quot;consonant&quot;,&quot;ㅋ&quot;,&quot;여린입천장소리·파열음·거센소리.&quot;,&quot;ㄱ의 거센소리 계열이다.&quot;],
[&quot;consonant&quot;,&quot;ㅊ&quot;,&quot;센입천장소리·파찰음·거센소리.&quot;,&quot;ㅈ의 거센소리 계열이다.&quot;],
[&quot;sense&quot;,&quot;양성 모음&quot;,&quot;어감이 밝고 산뜻한 느낌을 주는 모음.&quot;,&quot;대표적으로 ㅏ, ㅗ가 쓰인다.&quot;],
[&quot;sense&quot;,&quot;음성 모음&quot;,&quot;어감이 어둡고 큰 느낌을 주는 모음.&quot;,&quot;대표적으로 ㅓ, ㅜ가 쓰인다.&quot;],
[&quot;sense&quot;,&quot;모음조화&quot;,&quot;양성 모음은 양성 모음끼리, 음성 모음은 음성 모음끼리 어울리려는 현상.&quot;,&quot;막아/먹어, 폴짝/풀쩍을 떠올린다.&quot;],
[&quot;sense&quot;,&quot;자음의 어감 차이&quot;,&quot;예사소리보다 된소리, 된소리보다 거센소리가 더 강하거나 거칠게 느껴질 수 있다.&quot;,&quot;감감-깜깜-캄캄&quot;],
[&quot;sense&quot;,&quot;우리말 자음 체계의 특징&quot;,&quot;우리말은 예사소리·된소리·거센소리를 구별하지만 영어는 같은 방식으로 구별하지 않는다.&quot;,&quot;불/뿔/풀, 달/딸/탈&quot;],
[&quot;sense&quot;,&quot;외국어 화자의 혼동&quot;,&quot;국어의 소리 세기 대립을 모르면 살/쌀, 달/딸/탈 등을 혼동할 수 있다.&quot;,&quot;음운 체계의 차이 때문에 생기는 의사소통 문제이다.&quot;],
[&quot;strategy&quot;,&quot;대표 유형 풀이 1&quot;,&quot;문제에서 묻는 기준이 위치인지, 방법인지, 세기인지 먼저 구별한다.&quot;,&quot;자음 문제의 대부분은 세 기준을 섞어 낸다.&quot;],
[&quot;strategy&quot;,&quot;대표 유형 풀이 2&quot;,&quot;모음 문제는 단모음/이중모음, 원순/평순, 고/중/저, 전설/후설을 차례로 확인한다.&quot;,&quot;조건을 하나씩 지워 가면 실수가 줄어든다.&quot;],
[&quot;strategy&quot;,&quot;대표 유형 풀이 3&quot;,&quot;적절하지 않은 것을 묻는 문제는 틀린 핵심어 하나를 찾아 바르게 고친다.&quot;,&quot;예: ㄹ은 여린입천장소리가 아니라 잇몸소리.&quot;],
[&quot;strategy&quot;,&quot;대표 유형 풀이 4&quot;,&quot;보기의 상황이 의사소통 혼란이면 국어와 외국어의 음운 체계 차이를 떠올린다.&quot;,&quot;소리 세기 대립을 구별하지 못하는 상황이 많다.&quot;],
[&quot;strategy&quot;,&quot;대표 유형 풀이 5&quot;,&quot;양성/음성 모음 문제는 밝고 산뜻한 느낌과 어둡고 무거운 느낌을 대비한다.&quot;,&quot;반짝반짝/번쩍번쩍, 폴짝/풀쩍&quot;]
].map(([cat,term,def,tip])=&gt;({cat,term,def,tip}));
const CUSTOM=[
Q(&quot;basic&quot;,&quot;다음 중 현대 국어의 음운 체계에 해당하지 않는 것은?&quot;,&quot;성조&quot;,[&quot;자음&quot;,&quot;모음&quot;,&quot;성조&quot;,&quot;소리의 길이&quot;],&quot;현대 국어에서는 성조가 일반적인 음운 체계로 쓰이지 않는다.&quot;),
Q(&quot;basic&quot;,&quot;음운에 대한 설명으로 적절하지 않은 것은?&quot;,&quot;음운은 모두 글자로 표기할 수 있다.&quot;,[&quot;음운은 뜻을 구별한다.&quot;,&quot;음운이 달라지면 뜻이 달라질 수 있다.&quot;,&quot;음운은 모두 글자로 표기할 수 있다.&quot;,&quot;음운에는 분절 음운과 비분절 음운이 있다.&quot;],&quot;소리의 길이 같은 비분절 음운은 글자로 직접 표기하기 어렵다.&quot;),
Q(&quot;basic&quot;,&quot;‘밥’과 ‘삽’이 다른 뜻을 가지는 이유로 가장 적절한 것은?&quot;,&quot;ㅂ과 ㅅ이라는 자음의 차이 때문이다.&quot;,[&quot;ㅏ와 ㅜ라는 모음의 차이 때문이다.&quot;,&quot;ㅂ과 ㅅ이라는 자음의 차이 때문이다.&quot;,&quot;소리의 길이가 다르기 때문이다.&quot;,&quot;단어의 음절 수가 다르기 때문이다.&quot;],&quot;두 단어는 첫 자음이 달라져 뜻이 달라진다.&quot;),
Q(&quot;basic&quot;,&quot;‘눈[眼]’과 ‘눈ː[雪]’의 뜻을 구별하는 음운은?&quot;,&quot;소리의 길이&quot;,[&quot;자음&quot;,&quot;모음&quot;,&quot;소리의 길이&quot;,&quot;성조&quot;],&quot;소리의 길이는 비분절 음운이다.&quot;),
Q(&quot;vowel&quot;,&quot;다음 중 단모음만으로 묶인 것은?&quot;,&quot;ㅏ, ㅐ, ㅓ, ㅔ&quot;,[&quot;ㅑ, ㅕ, ㅛ, ㅠ&quot;,&quot;ㅏ, ㅐ, ㅓ, ㅔ&quot;,&quot;ㅘ, ㅙ, ㅝ, ㅞ&quot;,&quot;ㅢ, ㅒ, ㅖ, ㅕ&quot;],&quot;단모음은 발음할 때 입술 모양이나 혀 위치가 변하지 않는다.&quot;),
Q(&quot;vowel&quot;,&quot;다음 중 이중모음만으로 묶인 것은?&quot;,&quot;ㅑ, ㅕ, ㅛ, ㅠ&quot;,[&quot;ㅏ, ㅐ, ㅓ, ㅔ&quot;,&quot;ㅗ, ㅚ, ㅜ, ㅟ&quot;,&quot;ㅑ, ㅕ, ㅛ, ㅠ&quot;,&quot;ㅣ, ㅟ, ㅡ, ㅜ&quot;],&quot;이중모음은 발음할 때 입술 모양이나 혀 위치가 변한다.&quot;),
Q(&quot;vowel&quot;,&quot;‘ㅔ’와 ‘ㅐ’를 구별할 때 가장 중요한 차이는?&quot;,&quot;혀의 높이&quot;,[&quot;입술의 둥근 정도&quot;,&quot;혀의 높이&quot;,&quot;소리의 세기&quot;,&quot;공기의 장애 여부&quot;],&quot;둘 다 전설·평순 모음이며 ㅔ는 중모음, ㅐ는 저모음이다.&quot;),
Q(&quot;vowel&quot;,&quot;전설·원순·고모음에 해당하는 모음은?&quot;,&quot;ㅟ&quot;,[&quot;ㅣ&quot;,&quot;ㅟ&quot;,&quot;ㅡ&quot;,&quot;ㅜ&quot;],&quot;전설 고모음 중 원순 모음은 ㅟ이다.&quot;),
Q(&quot;vowel&quot;,&quot;후설·평순·중모음에 해당하는 모음은?&quot;,&quot;ㅓ&quot;,[&quot;ㅔ&quot;,&quot;ㅚ&quot;,&quot;ㅓ&quot;,&quot;ㅗ&quot;],&quot;ㅓ는 후설·평순·중모음이다.&quot;),
Q(&quot;vowel&quot;,&quot;원순 모음으로만 묶인 것은?&quot;,&quot;ㅗ, ㅚ, ㅜ, ㅟ&quot;,[&quot;ㅏ, ㅐ, ㅓ, ㅔ&quot;,&quot;ㅗ, ㅚ, ㅜ, ㅟ&quot;,&quot;ㅣ, ㅔ, ㅐ&quot;,&quot;ㅡ, ㅓ, ㅏ&quot;],&quot;입술을 둥글게 오므려 발음하는 모음이다.&quot;),
Q(&quot;vowel&quot;,&quot;후설 모음으로만 묶인 것은?&quot;,&quot;ㅡ, ㅜ, ㅓ, ㅗ, ㅏ&quot;,[&quot;ㅣ, ㅟ, ㅔ, ㅚ, ㅐ&quot;,&quot;ㅡ, ㅜ, ㅓ, ㅗ, ㅏ&quot;,&quot;ㅣ, ㅔ, ㅐ, ㅏ&quot;,&quot;ㅚ, ㅟ, ㅜ, ㅗ&quot;],&quot;후설 모음은 혀의 최고점이 뒤쪽에 있다.&quot;),
Q(&quot;consonant&quot;,&quot;‘ㄹ’의 자음 체계로 옳은 것은?&quot;,&quot;잇몸소리·유음&quot;,[&quot;여린입천장소리·비음&quot;,&quot;잇몸소리·유음&quot;,&quot;센입천장소리·파찰음&quot;,&quot;목청소리·마찰음&quot;],&quot;ㄹ은 혀끝과 윗잇몸 사이에서 나는 유음이다.&quot;),
Q(&quot;consonant&quot;,&quot;‘ㅎ’의 자음 체계로 옳은 것은?&quot;,&quot;목청소리·마찰음&quot;,[&quot;목청소리·마찰음&quot;,&quot;센입천장소리·파찰음&quot;,&quot;잇몸소리·비음&quot;,&quot;여린입천장소리·파열음&quot;],&quot;ㅎ은 목청소리이자 마찰음이다.&quot;),
Q(&quot;consonant&quot;,&quot;혀끝과 윗잇몸 사이에서 나며, 마찰음이고, 된소리인 자음은?&quot;,&quot;ㅆ&quot;,[&quot;ㄸ&quot;,&quot;ㅋ&quot;,&quot;ㅆ&quot;,&quot;ㄴ&quot;],&quot;잇몸소리 중 마찰음은 ㅅ, ㅆ이고 그중 된소리는 ㅆ이다.&quot;),
Q(&quot;consonant&quot;,&quot;‘ㅂ, ㅃ, ㅍ’의 공통점은?&quot;,&quot;입술소리이자 파열음이다.&quot;,[&quot;잇몸소리이자 파찰음이다.&quot;,&quot;입술소리이자 파열음이다.&quot;,&quot;목청소리이자 마찰음이다.&quot;,&quot;여린입천장소리이자 비음이다.&quot;],&quot;두 입술 사이에서 공기를 막았다 터뜨리는 소리이다.&quot;),
Q(&quot;consonant&quot;,&quot;파찰음으로만 묶인 것은?&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;,[&quot;ㅅ, ㅆ, ㅎ&quot;,&quot;ㄱ, ㄲ, ㅋ&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;,&quot;ㅁ, ㄴ, ㅇ&quot;],&quot;파찰음은 ㅈ, ㅉ, ㅊ이다.&quot;),
Q(&quot;consonant&quot;,&quot;비음으로만 묶인 것은?&quot;,&quot;ㅁ, ㄴ, ㅇ&quot;,[&quot;ㅁ, ㄴ, ㅇ&quot;,&quot;ㄹ, ㅅ, ㅎ&quot;,&quot;ㄱ, ㄷ, ㅂ&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;],&quot;공기를 코로 내보내며 내는 소리이다.&quot;),
Q(&quot;consonant&quot;,&quot;여린입천장소리로만 묶인 것은?&quot;,&quot;ㄱ, ㄲ, ㅋ, ㅇ&quot;,[&quot;ㅁ, ㅂ, ㅃ, ㅍ&quot;,&quot;ㄴ, ㄷ, ㄸ, ㅌ&quot;,&quot;ㅈ, ㅉ, ㅊ&quot;,&quot;ㄱ, ㄲ, ㅋ, ㅇ&quot;],&quot;혀의 뒷부분과 여린입천장 사이에서 나는 소리이다.&quot;),
Q(&quot;consonant&quot;,&quot;소리의 세기 기준에서 거센소리로만 묶인 것은?&quot;,&quot;ㅋ, ㅌ, ㅍ, ㅊ&quot;,[&quot;ㄱ, ㄷ, ㅂ, ㅈ&quot;,&quot;ㄲ, ㄸ, ㅃ, ㅉ&quot;,&quot;ㅋ, ㅌ, ㅍ, ㅊ&quot;,&quot;ㅁ, ㄴ, ㅇ, ㄹ&quot;],&quot;거센소리는 ㅋ, ㅌ, ㅍ, ㅊ이다.&quot;),
Q(&quot;sense&quot;,&quot;‘감감-깜깜-캄캄’에서 느낌이 강해지는 주된 이유는?&quot;,&quot;자음의 세기가 달라지기 때문이다.&quot;,[&quot;모음의 높이가 달라지기 때문이다.&quot;,&quot;자음의 세기가 달라지기 때문이다.&quot;,&quot;소리의 길이가 달라지기 때문이다.&quot;,&quot;음절 수가 달라지기 때문이다.&quot;],&quot;예사소리, 된소리, 거센소리의 차이가 어감 차이를 만든다.&quot;),
Q(&quot;sense&quot;,&quot;‘반짝반짝’보다 ‘번쩍번쩍’이 더 크고 무거운 느낌을 주는 이유는?&quot;,&quot;양성 모음과 음성 모음의 차이 때문이다.&quot;,[&quot;파열음과 파찰음의 차이 때문이다.&quot;,&quot;양성 모음과 음성 모음의 차이 때문이다.&quot;,&quot;단모음과 이중모음의 차이 때문이다.&quot;,&quot;비음과 유음의 차이 때문이다.&quot;],&quot;ㅏ는 밝은 느낌, ㅓ는 어둡고 무거운 느낌을 준다.&quot;),
Q(&quot;sense&quot;,&quot;‘막아’와 ‘먹어’처럼 어미가 다르게 선택되는 현상은?&quot;,&quot;모음조화&quot;,[&quot;모음탈락&quot;,&quot;모음첨가&quot;,&quot;모음조화&quot;,&quot;모음축약&quot;],&quot;양성 모음은 양성끼리, 음성 모음은 음성끼리 어울리려는 현상이다.&quot;),
Q(&quot;sense&quot;,&quot;영어권 화자가 ‘달/딸/탈’을 혼동하는 이유로 가장 적절한 것은?&quot;,&quot;국어의 소리 세기 대립을 영어와 같은 방식으로 구별하지 못하기 때문이다.&quot;,[&quot;국어에는 모음이 없기 때문이다.&quot;,&quot;국어의 소리 세기 대립을 영어와 같은 방식으로 구별하지 못하기 때문이다.&quot;,&quot;국어에는 파열음이 없기 때문이다.&quot;,&quot;영어에는 자음이 없기 때문이다.&quot;],&quot;우리말은 예사소리·된소리·거센소리 대립이 두드러진다.&quot;),
Q(&quot;strategy&quot;,&quot;자음 체계 문제를 풀 때 가장 먼저 확인해야 할 기준은?&quot;,&quot;위치·방법·세기 중 무엇을 묻는지&quot;,[&quot;단어의 품사&quot;,&quot;문장의 길이&quot;,&quot;위치·방법·세기 중 무엇을 묻는지&quot;,&quot;모음조화 여부&quot;],&quot;자음 문제는 조음 위치, 조음 방법, 소리의 세기를 섞어 묻는다.&quot;),
Q(&quot;strategy&quot;,&quot;모음 체계 문제 풀이 순서로 가장 알맞은 것은?&quot;,&quot;단모음/이중모음 → 원순/평순 → 고/중/저 → 전설/후설&quot;,[&quot;자음/모음 → 비음/유음 → 예사/된/거센&quot;,&quot;단모음/이중모음 → 원순/평순 → 고/중/저 → 전설/후설&quot;,&quot;성조 → 억양 → 길이 → 문자&quot;,&quot;품사 → 문장 성분 → 높임 표현&quot;],&quot;모음 문제는 분류 기준을 단계적으로 적용해야 한다.&quot;)
];
const state={mode:&quot;study&quot;,cat:&quot;all&quot;,idx:0,open:false,questions:[],q:0,score:0,locked:false,wrong:[],timer:null,seconds:30};
const $=s=&gt;document.querySelector(s),screen=$(&quot;#screen&quot;),catSel=$(&quot;#category&quot;),countSel=$(&quot;#countSelect&quot;),toast=$(&quot;#toast&quot;);
function Q(cat,question,answer,choices,explain){return{cat,question,answer,choices,explain,type:&quot;대표 유형&quot;}}
function esc(s){return String(s).replace(/[&amp;&lt;&gt;&quot;']/g,c=&gt;({&quot;&amp;&quot;:&quot;&amp;amp;&quot;,&quot;&lt;&quot;:&quot;&amp;lt;&quot;,&quot;&gt;&quot;:&quot;&amp;gt;&quot;,'&quot;':&quot;&amp;quot;&quot;,&quot;'&quot;:&quot;&amp;#039;&quot;}[c]))}
function shuffle(a){const b=[...a];for(let i=b.length-1;i&gt;0;i--){const j=Math.floor(Math.random()*(i+1));[b[i],b[j]]=[b[j],b[i]]}return b}
function filteredCards(){return state.cat===&quot;all&quot;?CARDS:CARDS.filter(c=&gt;c.cat===state.cat)}
function catName(v=state.cat){return CATS.find(c=&gt;c[0]===v)?.[1]||&quot;전체&quot;}
function fillControls(){catSel.innerHTML=CATS.map(c=&gt;`&lt;option value=&quot;${c[0]}&quot; ${c[0]===state.cat?&quot;selected&quot;:&quot;&quot;}&gt;${c[1]}&lt;/option&gt;`).join(&quot;&quot;)}
function setMode(mode){state.mode=mode;stopTimer();document.querySelectorAll(&quot;.tab&quot;).forEach(b=&gt;b.classList.toggle(&quot;active&quot;,b.dataset.mode===mode));if(mode===&quot;study&quot;)renderStudy();else startQuiz(mode)}
function renderHome(){
 screen.innerHTML=`&lt;section class=&quot;hero&quot;&gt;&lt;div class=&quot;eyebrow&quot;&gt;Korean Grammar · Phonology&lt;/div&gt;&lt;h1&gt;국어의 음운 체계&lt;/h1&gt;&lt;p&gt;중3-1 어법 최난도 단원을 암기 카드, 즉시 풀이 연습, 30초 테스트로 반복합니다.&lt;/p&gt;&lt;/section&gt;&lt;div class=&quot;stats&quot;&gt;&lt;div&gt;&lt;strong&gt;${CARDS.length}&lt;/strong&gt;&lt;span&gt;암기 카드&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${buildQuestions().length}&lt;/strong&gt;&lt;span&gt;문제 은행&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;30초&lt;/strong&gt;&lt;span&gt;테스트&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;unit-grid&quot;&gt;${CATS.slice(1).map(c=&gt;`&lt;button class=&quot;unit ${state.cat===c[0]?&quot;selected&quot;:&quot;&quot;}&quot; data-cat=&quot;${c[0]}&quot;&gt;&lt;b&gt;${c[1]}&lt;/b&gt;&lt;span&gt;${CARDS.filter(x=&gt;x.cat===c[0]).length}개 카드 · 대표 유형 포함&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;`;
 screen.querySelectorAll(&quot;[data-cat]&quot;).forEach(b=&gt;b.onclick=()=&gt;{state.cat=b.dataset.cat;state.idx=0;renderHome();toastMsg(`${catName()} 선택`)});
}
function renderStudy(){
 fillControls(); const cards=filteredCards(); if(!cards.length){state.cat=&quot;all&quot;;return renderStudy()} const c=cards[state.idx%cards.length];
 screen.innerHTML=`&lt;article class=&quot;card&quot;&gt;&lt;div class=&quot;cue&quot;&gt;&lt;div&gt;&lt;small&gt;${catName(c.cat)}&lt;/small&gt;&lt;div class=&quot;term&quot;&gt;${esc(c.term)}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;body&quot;&gt;&lt;h2&gt;암기 카드&lt;/h2&gt;${state.open?`&lt;div class=&quot;open&quot;&gt;&lt;p&gt;&lt;b&gt;뜻&lt;/b&gt;&lt;br&gt;${esc(c.def)}&lt;/p&gt;&lt;p&gt;&lt;b&gt;시험 포인트&lt;/b&gt;&lt;br&gt;${esc(c.tip)}&lt;/p&gt;&lt;div class=&quot;chips&quot;&gt;&lt;span class=&quot;chip&quot;&gt;${catName(c.cat)}&lt;/span&gt;&lt;span class=&quot;chip&quot;&gt;${state.idx%cards.length+1}/${cards.length}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;`:`&lt;button class=&quot;hidden&quot; id=&quot;openCard&quot;&gt;터치해서 풀이와 시험 포인트 보기&lt;/button&gt;`}&lt;/div&gt;&lt;/article&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button id=&quot;prev&quot;&gt;‹&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;toggle&quot;&gt;${state.open?&quot;풀이 숨기기&quot;:&quot;풀이 보기&quot;}&lt;/button&gt;&lt;button id=&quot;next&quot;&gt;›&lt;/button&gt;&lt;/div&gt;&lt;button class=&quot;secondary&quot; id=&quot;goPractice&quot; style=&quot;width:100%;margin-top:8px&quot;&gt;이 범위 연습문제 풀기&lt;/button&gt;`;
 $(&quot;#prev&quot;).onclick=()=&gt;{state.idx=(state.idx-1+cards.length)%cards.length;state.open=false;renderStudy()}; $(&quot;#next&quot;).onclick=()=&gt;{state.idx=(state.idx+1)%cards.length;state.open=false;renderStudy()}; $(&quot;#toggle&quot;).onclick=()=&gt;{state.open=!state.open;renderStudy()}; $(&quot;#goPractice&quot;).onclick=()=&gt;setMode(&quot;practice&quot;); const o=$(&quot;#openCard&quot;); if(o)o.onclick=()=&gt;{state.open=true;renderStudy()};
}
function buildQuestions(){
 const terms=CARDS.map(c=&gt;c.term), defs=CARDS.map(c=&gt;c.def), qs=[];
 for(const c of CARDS){
  qs.push({cat:c.cat,type:&quot;개념 확인&quot;,question:`다음 설명에 알맞은 개념은?\n${c.def}`,answer:c.term,choices:makeChoices(c.term,terms),explain:`${c.term}: ${c.def}`});
  qs.push({cat:c.cat,type:&quot;개념 적용&quot;,question:`'${c.term}'에 대한 설명으로 옳은 것은?`,answer:c.def,choices:makeChoices(c.def,defs),explain:`${c.term}: ${c.def}`});
 }
 return qs.concat(CUSTOM);
}
function makeChoices(answer,pool){const out=[answer];for(const x of shuffle(pool)){if(x!==answer&amp;&amp;!out.includes(x))out.push(x);if(out.length===4)break}return shuffle(out)}
function quizPool(){let qs=buildQuestions().filter(q=&gt;state.cat===&quot;all&quot;||q.cat===state.cat);return shuffle(qs)}
function startQuiz(mode){fillControls();let qs=quizPool();const count=countSel.value===&quot;all&quot;?qs.length:Number(countSel.value);state.questions=qs.slice(0,Math.min(count,qs.length));state.q=0;state.score=0;state.wrong=[];state.locked=false;renderQuestion();if(mode===&quot;test&quot;)startTimer()}
function renderQuestion(){if(state.q&gt;=state.questions.length)return renderResult();const q=state.questions[state.q],pct=(state.q+1)/state.questions.length*100;state.locked=false;screen.innerHTML=`&lt;div class=&quot;quizTop&quot;&gt;&lt;div class=&quot;bar&quot; style=&quot;--p:${pct}%&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;b&gt;${state.q+1}/${state.questions.length}&lt;/b&gt;${state.mode===&quot;test&quot;?`&lt;div class=&quot;timer&quot; id=&quot;timer&quot;&gt;30&lt;/div&gt;`:&quot;&quot;}&lt;/div&gt;&lt;section class=&quot;qcard&quot;&gt;&lt;div class=&quot;meta&quot;&gt;${catName(q.cat)} · ${q.type}&lt;/div&gt;&lt;h2&gt;${esc(q.question)}&lt;/h2&gt;&lt;div class=&quot;choices&quot;&gt;${q.choices.map((c,i)=&gt;`&lt;button class=&quot;choice&quot; data-choice=&quot;${esc(c)}&quot;&gt;&lt;b&gt;${i+1}&lt;/b&gt;&lt;span&gt;${esc(c)}&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;&lt;div id=&quot;feedback&quot;&gt;&lt;/div&gt;&lt;/section&gt;`;screen.querySelectorAll(&quot;.choice&quot;).forEach(b=&gt;b.onclick=()=&gt;answer(b.dataset.choice))}
function answer(v,timeout=false){if(state.locked)return;state.locked=true;stopTimer();const q=state.questions[state.q],ok=v===q.answer;if(ok)state.score++;else state.wrong.push({q,selected:v||&quot;시간 초과&quot;});screen.querySelectorAll(&quot;.choice&quot;).forEach(b=&gt;{b.disabled=true;if(b.dataset.choice===q.answer)b.classList.add(&quot;correct&quot;);if(b.dataset.choice===v&amp;&amp;!ok)b.classList.add(&quot;wrong&quot;)});const fb=$(&quot;#feedback&quot;);fb.innerHTML=`&lt;div class=&quot;feedback ${ok?&quot;ok&quot;:&quot;bad&quot;}&quot;&gt;&lt;b&gt;${ok?&quot;정답&quot;:&quot;오답&quot;}${timeout?&quot; · 시간 초과&quot;:&quot;&quot;}&lt;/b&gt;&lt;br&gt;정답: ${esc(q.answer)}&lt;br&gt;${esc(q.explain)}&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;width:100%;margin-top:9px&quot;&gt;${state.q===state.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;`;$(&quot;#nextQ&quot;).onclick=()=&gt;{state.q++;renderQuestion();if(state.mode===&quot;test&quot;&amp;&amp;state.q&lt;state.questions.length)startTimer()}}
function startTimer(){stopTimer();state.seconds=30;const tick=()=&gt;{const t=$(&quot;#timer&quot;);if(t){t.textContent=state.seconds;t.classList.toggle(&quot;danger&quot;,state.seconds&lt;=7)}if(state.seconds&lt;=0)return answer(null,true);state.seconds--};tick();state.timer=setInterval(tick,1000)}
function stopTimer(){clearInterval(state.timer);state.timer=null}
function renderResult(){stopTimer();const total=state.questions.length,rate=Math.round(state.score/total*100);screen.innerHTML=`&lt;section class=&quot;result&quot;&gt;&lt;h2&gt;${catName()} ${state.mode===&quot;test&quot;?&quot;테스트&quot;:&quot;연습&quot;} 결과&lt;/h2&gt;&lt;div class=&quot;score&quot; style=&quot;--score:${rate}%&quot;&gt;${rate}&lt;/div&gt;&lt;p&gt;&lt;b&gt;${state.score}/${total}문항 정답&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;button class=&quot;primary&quot; id=&quot;retry&quot;&gt;다시 풀기&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;share&quot; style=&quot;margin-top:8px;width:100%&quot;&gt;결과 전송&lt;/button&gt;&lt;/div&gt;${state.wrong.length?`&lt;div class=&quot;wrongList&quot;&gt;&lt;h3&gt;오답 정리&lt;/h3&gt;${state.wrong.slice(0,12).map(w=&gt;`&lt;div class=&quot;wrong&quot;&gt;&lt;b&gt;정답: ${esc(w.q.answer)}&lt;/b&gt;&lt;br&gt;${esc(w.q.question)}&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`:`&lt;p&gt;틀린 문제가 없습니다.&lt;/p&gt;`}&lt;/section&gt;`;$(&quot;#retry&quot;).onclick=()=&gt;startQuiz(state.mode);$(&quot;#share&quot;).onclick=shareResult}
function shareResult(){const text=state.questions.length?`YM 중3 국어 음운 체계 ${catName()} 결과: ${state.score}/${state.questions.length}문항 (${Math.round(state.score/state.questions.length*100)}점)`:`YM 중3 국어 음운 체계 암기 카드와 문제`;if(navigator.share)navigator.share({title:&quot;YM 중3 국어 음운 체계&quot;,text}).catch(()=&gt;copyText(text));else copyText(text)}
function copyText(t){navigator.clipboard?.writeText(t);toastMsg(&quot;복사했습니다. 카카오톡에 붙여넣기 하세요.&quot;)}
function toastMsg(t){toast.textContent=t;toast.classList.add(&quot;show&quot;);setTimeout(()=&gt;toast.classList.remove(&quot;show&quot;),1700)}
catSel.onchange=()=&gt;{state.cat=catSel.value;state.idx=0;state.open=false;state.mode===&quot;study&quot;?renderStudy():startQuiz(state.mode)};
countSel.onchange=()=&gt;{if(state.mode!==&quot;study&quot;)startQuiz(state.mode)};
document.querySelectorAll(&quot;.tab&quot;).forEach(b=&gt;b.onclick=()=&gt;setMode(b.dataset.mode));
$(&quot;#homeBtn&quot;).onclick=()=&gt;{state.mode=&quot;study&quot;;state.cat=&quot;all&quot;;state.idx=0;state.open=false;document.querySelectorAll(&quot;.tab&quot;).forEach(b=&gt;b.classList.toggle(&quot;active&quot;,b.dataset.mode===&quot;study&quot;));renderHome()};
$(&quot;#shareTop&quot;).onclick=shareResult;
fillControls();renderHome();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>내신 중등/동성중</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/395</guid>
      <comments>https://ymedu.tistory.com/395#entry395comment</comments>
      <pubDate>Thu, 2 Jul 2026 14:35:59 +0900</pubDate>
    </item>
    <item>
      <title>중3 과학 기말대비</title>
      <link>https://ymedu.tistory.com/394</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot;&gt;
&lt;meta name=&quot;theme-color&quot; content=&quot;#16352f&quot;&gt;
&lt;title&gt;YM 중3 과학 코넬 암기와 4지선다&lt;/title&gt;
&lt;style&gt;
:root{--bg:#eef3ef;--paper:#fffdf7;--ink:#17231f;--muted:#65736d;--line:#d8e0d9;--deep:#16352f;--accent:#e38b43;--good:#207a50;--bad:#b84b4b;--shadow:0 14px 34px rgba(22,53,47,.12)}
*{box-sizing:border-box}html{background:#dfe9e2}body{margin:0;color:var(--ink);font-family:&quot;Pretendard&quot;,&quot;Noto Sans KR&quot;,&quot;Malgun Gothic&quot;,system-ui,sans-serif;background:radial-gradient(circle at 100% 0,rgba(227,139,67,.18),transparent 25rem),var(--bg)}button,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}.app{width:min(100%,760px);min-height:100svh;margin:auto;background:var(--bg)}.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;background:rgba(238,243,239,.95);border-bottom:1px solid rgba(22,53,47,.1);backdrop-filter:blur(14px)}.brand{border:0;background:transparent;text-align:left;color:var(--deep);display:flex;align-items:center;gap:10px}.mark{width:42px;height:42px;border-radius:13px;background:var(--deep);color:#fff;display:grid;place-items:center;font-weight:950}.brand b{display:block;font-size:18px}.brand small{display:block;color:var(--muted);font-size:12px}.ghost{border:1px solid var(--line);background:var(--paper);border-radius:13px;padding:10px 12px;font-weight:900;color:var(--deep)}main{padding:18px 14px 92px}.hero{padding:18px 2px 8px}.eyebrow{color:var(--accent);font-size:12px;font-weight:950;letter-spacing:1px}.hero h1{margin:8px 0 8px;font-size:clamp(30px,8vw,48px);line-height:1.1;letter-spacing:-.5px}.hero p{margin:0;color:var(--muted);line-height:1.55}.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:16px 0}.select{width:100%;border:1px solid var(--line);background:var(--paper);border-radius:14px;padding:12px;color:var(--deep);font-weight:900}.seg{display:grid;grid-template-columns:1fr 1fr;gap:5px;background:#dfe8e1;border-radius:16px;padding:5px;margin:12px 0 16px}.seg button{border:0;border-radius:12px;padding:12px;background:transparent;color:var(--muted);font-weight:950}.seg button.active{background:var(--paper);color:var(--deep);box-shadow:0 3px 10px rgba(0,0,0,.07)}.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0}.summary div{background:var(--deep);color:white;border-radius:15px;text-align:center;padding:12px 6px}.summary strong{display:block;font-size:22px}.summary span{font-size:11px;opacity:.72}.unit-grid{display:grid;gap:10px}.unit{border:1px solid var(--line);background:var(--paper);border-radius:18px;padding:16px;text-align:left;box-shadow:0 4px 0 rgba(22,53,47,.03)}.unit.selected{border-color:var(--unit);box-shadow:inset 5px 0 0 var(--unit),0 4px 0 rgba(22,53,47,.03)}.unit b{display:block;font-size:17px;margin-bottom:6px}.unit span{color:var(--muted);font-size:13px;line-height:1.45}.tag{display:inline-block;margin-bottom:9px;border-radius:999px;background:var(--unit);color:white;font-size:12px;font-weight:950;padding:5px 9px}.cornell{display:grid;grid-template-columns:34% 66%;min-height:360px;background:var(--paper);border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:var(--shadow)}.cue{padding:18px 14px;border-right:1px solid var(--line);background:#f1f6f0}.note{padding:18px}.label{display:block;color:var(--muted);font-size:11px;font-weight:950;letter-spacing:.8px;margin-bottom:10px}.cue h2{margin:0;color:var(--unit);font-size:22px;line-height:1.25}.cue p,.note p{line-height:1.62}.note h3{margin:0 0 12px;font-size:24px}.hidden-note{min-height:160px;display:grid;place-items:center;text-align:center;border:1px dashed #b8c6bc;border-radius:16px;color:var(--muted);padding:16px}.open-note{min-height:160px;border-radius:16px;background:#f5f1e9;padding:16px}.cardnav{display:grid;grid-template-columns:50px 1fr 50px;gap:8px;margin-top:12px}.cardnav button,.primary,.secondary{border:0;border-radius:15px;padding:13px 14px;font-weight:950}.cardnav button{background:var(--paper);border:1px solid var(--line);color:var(--deep)}.primary{width:100%;background:var(--deep);color:white}.secondary{width:100%;background:#e0e8e2;color:var(--deep)}.quiz-start{background:var(--deep);color:white;border-radius:22px;padding:22px;box-shadow:var(--shadow)}.quiz-start p{color:rgba(255,255,255,.75);line-height:1.55}.rules{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0}.rules div{background:rgba(255,255,255,.1);border-radius:14px;padding:12px 6px;text-align:center}.rules strong{display:block;font-size:22px}.rules span{font-size:11px;opacity:.75}.qtop{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:10px}.progress{height:8px;background:#dbe4dd;border-radius:999px;overflow:hidden;flex:1}.progress i{display:block;height:100%;width:var(--p);background:var(--unit)}.counter{font-weight:950;color:var(--unit)}.qcard{background:var(--paper);border:1px solid var(--line);border-radius:22px;padding:18px;box-shadow:var(--shadow)}.qcard h2{font-size:21px;line-height:1.45;margin:8px 0 18px;white-space:pre-line}.meta{color:var(--unit);font-size:12px;font-weight:950}.choices{display:grid;gap:10px}.choice{width:100%;display:flex;gap:11px;align-items:flex-start;border:1px solid var(--line);border-radius:15px;background:white;padding:14px;text-align:left;color:var(--ink);line-height:1.45}.choice b{flex:0 0 auto;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#e9efe9;font-size:12px}.choice.correct{border-color:var(--good);background:#eef8f2;color:var(--good)}.choice.wrong{border-color:var(--bad);background:#fff0ee;color:var(--bad)}.choice:disabled{opacity:1}.explain{margin-top:13px;border-radius:14px;background:#f3efe7;padding:14px;line-height:1.55}.result{text-align:center;background:var(--paper);border:1px solid var(--line);border-radius:24px;padding:24px 16px;box-shadow:var(--shadow)}.score{width:150px;height:150px;margin:16px auto;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--unit) var(--score),#e0e6df 0);font-size:42px;font-weight:950}.wrong-list{text-align:left;display:grid;gap:8px;margin:16px 0}.wrong-list div{border-radius:13px;background:#f5f1e9;padding:12px;line-height:1.45}.bottom{position:fixed;left:50%;bottom:0;transform:translateX(-50%);width:min(100%,760px);display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:8px 10px calc(8px + env(safe-area-inset-bottom));background:rgba(255,253,247,.96);border-top:1px solid var(--line);backdrop-filter:blur(14px);z-index:30}.bottom button{border:0;background:transparent;border-radius:12px;padding:8px 4px;color:#7d8a84;font-weight:950}.bottom button.active{color:var(--deep);background:#edf3ee}.toast{position:fixed;left:50%;bottom:86px;transform:translate(-50%,16px);opacity:0;transition:.2s;background:var(--deep);color:white;border-radius:999px;padding:11px 15px;font-size:13px;z-index:50}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:430px){.top{padding:9px 10px}.mark{width:36px;height:36px}.brand b{font-size:15px}.brand small{font-size:10px}main{padding:12px 10px 86px}.hero h1{font-size:31px}.controls{grid-template-columns:1fr}.cornell{grid-template-columns:36% 64%;min-height:330px;border-radius:16px}.cue,.note{padding:13px 10px}.cue h2{font-size:19px}.note h3{font-size:21px}.qcard{padding:13px;border-radius:16px}.qcard h2{font-size:18px}.choice{padding:12px;font-size:15px}.rules strong{font-size:19px}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;app&quot;&gt;
&lt;header class=&quot;top&quot;&gt;
  &lt;button class=&quot;brand&quot; id=&quot;homeBtn&quot;&gt;&lt;span class=&quot;mark&quot;&gt;科&lt;/span&gt;&lt;span&gt;&lt;b&gt;YM 중3 과학&lt;/b&gt;&lt;small&gt;코넬 암기 · 4지선다 시험&lt;/small&gt;&lt;/span&gt;&lt;/button&gt;
  &lt;button class=&quot;ghost&quot; id=&quot;shareTop&quot;&gt;전송&lt;/button&gt;
&lt;/header&gt;
&lt;main id=&quot;app&quot;&gt;&lt;/main&gt;
&lt;nav class=&quot;bottom&quot;&gt;
  &lt;button data-view=&quot;home&quot;&gt;단원&lt;/button&gt;
  &lt;button data-view=&quot;study&quot;&gt;암기&lt;/button&gt;
  &lt;button data-view=&quot;quiz&quot;&gt;시험&lt;/button&gt;
&lt;/nav&gt;
&lt;div id=&quot;toast&quot; class=&quot;toast&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
const DATA=[
{id:&quot;4-1-1&quot;,title:&quot;눈과 귀&quot;,area:&quot;감각 기관&quot;,color:&quot;#2f7e77&quot;,items:[
[&quot;시각&quot;,&quot;눈에서 빛을 자극으로 받아들여 물체의 형태, 색깔, 거리 등을 느끼는 감각이다.&quot;,&quot;자극과 감각&quot;],
[&quot;홍채&quot;,&quot;동공의 크기를 조절하여 눈으로 들어오는 빛의 양을 조절한다.&quot;,&quot;눈의 구조&quot;],
[&quot;각막&quot;,&quot;빛이 통과하는 투명한 막이다.&quot;,&quot;눈의 구조&quot;],
[&quot;수정체&quot;,&quot;볼록 렌즈처럼 빛을 굴절시켜 상이 망막에 맺히게 한다.&quot;,&quot;눈의 구조&quot;],
[&quot;섬모체&quot;,&quot;수정체의 두께를 조절하는 근육이다.&quot;,&quot;눈의 구조&quot;],
[&quot;망막&quot;,&quot;상이 맺히는 곳이며 시각 세포가 있어 빛을 받아들인다.&quot;,&quot;눈의 구조&quot;],
[&quot;시각 신경&quot;,&quot;시각 세포에서 받아들인 자극을 뇌로 전달한다.&quot;,&quot;눈의 구조&quot;],
[&quot;맹점&quot;,&quot;시각 세포가 없어 상이 맺혀도 보이지 않는 부분이다.&quot;,&quot;눈의 구조&quot;],
[&quot;황반&quot;,&quot;시각 세포가 모여 있어 상이 가장 뚜렷하게 맺히는 부분이다.&quot;,&quot;눈의 구조&quot;],
[&quot;밝을 때 눈의 조절&quot;,&quot;홍채가 확장하고 동공이 축소되어 눈으로 들어오는 빛의 양이 줄어든다.&quot;,&quot;조절 작용&quot;],
[&quot;가까운 곳을 볼 때&quot;,&quot;섬모체가 수축하고 수정체가 두꺼워진다.&quot;,&quot;조절 작용&quot;],
[&quot;귓바퀴&quot;,&quot;소리를 모아 외이도로 보낸다.&quot;,&quot;귀의 구조&quot;],
[&quot;고막&quot;,&quot;소리에 의해 진동하는 얇은 막이다.&quot;,&quot;귀의 구조&quot;],
[&quot;귓속뼈&quot;,&quot;고막의 진동을 증폭시켜 달팽이관으로 전달한다.&quot;,&quot;귀의 구조&quot;],
[&quot;달팽이관&quot;,&quot;청각 세포가 있어 진동을 자극으로 받아들인다.&quot;,&quot;귀의 구조&quot;],
[&quot;반고리관&quot;,&quot;몸의 회전을 감지한다.&quot;,&quot;평형 감각&quot;],
[&quot;전정 기관&quot;,&quot;몸의 기울어짐을 감지한다.&quot;,&quot;평형 감각&quot;],
[&quot;청각의 전달 경로&quot;,&quot;소리 → 귓바퀴 → 외이도 → 고막 → 귓속뼈 → 달팽이관 → 청각 신경 → 뇌&quot;,&quot;전달 경로&quot;]
]},
{id:&quot;4-1-2&quot;,title:&quot;코·혀·피부&quot;,area:&quot;감각 기관&quot;,color:&quot;#d47c35&quot;,items:[
[&quot;후각&quot;,&quot;코에서 기체 상태의 화학 물질을 자극으로 받아들여 냄새를 느끼는 감각이다.&quot;,&quot;코&quot;],
[&quot;후각 상피&quot;,&quot;후각 세포가 모여 있고 점액으로 덮여 있어 기체 상태의 화학 물질이 녹는다.&quot;,&quot;코&quot;],
[&quot;후각 세포&quot;,&quot;기체 상태의 화학 물질을 자극으로 받아들인다.&quot;,&quot;코&quot;],
[&quot;후각 신경&quot;,&quot;후각 세포에서 받아들인 자극을 뇌로 전달한다.&quot;,&quot;코&quot;],
[&quot;미각&quot;,&quot;혀에서 액체 상태의 화학 물질을 자극으로 받아들여 맛을 느끼는 감각이다.&quot;,&quot;혀&quot;],
[&quot;유두&quot;,&quot;혀 표면에 나 있는 작은 돌기이다.&quot;,&quot;혀&quot;],
[&quot;맛봉오리&quot;,&quot;유두 옆면에 분포하며 맛세포가 모여 있다.&quot;,&quot;혀&quot;],
[&quot;맛세포&quot;,&quot;액체 상태의 화학 물질을 자극으로 받아들인다.&quot;,&quot;혀&quot;],
[&quot;기본 맛&quot;,&quot;단맛, 신맛, 쓴맛, 짠맛, 감칠맛이다.&quot;,&quot;혀&quot;],
[&quot;매운맛&quot;,&quot;미각이 아니라 혀와 입속 피부의 통점에서 받아들이는 피부 감각이다.&quot;,&quot;혀&quot;],
[&quot;후각과 미각의 상호 작용&quot;,&quot;음식의 맛을 느낄 때 냄새와 맛이 함께 작용하여 다양한 맛을 느끼게 한다.&quot;,&quot;감각 상호 작용&quot;],
[&quot;피부 감각&quot;,&quot;피부에서 접촉, 압력, 차가움, 따뜻함, 통증 등을 느끼는 감각이다.&quot;,&quot;피부&quot;],
[&quot;감각점&quot;,&quot;피부에서 자극을 받아들이는 곳이다.&quot;,&quot;피부&quot;],
[&quot;통점&quot;,&quot;통증을 받아들이는 감각점이며 일반적으로 가장 많이 분포한다.&quot;,&quot;피부&quot;],
[&quot;압점&quot;,&quot;누르는 압력을 받아들이는 감각점이다.&quot;,&quot;피부&quot;],
[&quot;촉점&quot;,&quot;접촉 자극을 받아들이는 감각점이다.&quot;,&quot;피부&quot;],
[&quot;냉점&quot;,&quot;차가움을 받아들이는 감각점이다.&quot;,&quot;피부&quot;],
[&quot;온점&quot;,&quot;따뜻함을 받아들이는 감각점이다.&quot;,&quot;피부&quot;]
]},
{id:&quot;4-2-1&quot;,title:&quot;신경계의 구성과 기능&quot;,area:&quot;자극과 반응&quot;,color:&quot;#526eb5&quot;,items:[
[&quot;뉴런&quot;,&quot;신경계를 이루는 기본 단위인 신경 세포이다.&quot;,&quot;뉴런&quot;],
[&quot;가지 돌기&quot;,&quot;다른 뉴런이나 감각 기관으로부터 자극을 받아들인다.&quot;,&quot;뉴런&quot;],
[&quot;신경 세포체&quot;,&quot;핵과 세포질이 모여 있으며 뉴런의 생명 활동이 일어난다.&quot;,&quot;뉴런&quot;],
[&quot;축삭 돌기&quot;,&quot;신경 세포체에서 길게 뻗어 나와 다른 뉴런이나 기관으로 자극을 전달한다.&quot;,&quot;뉴런&quot;],
[&quot;감각 뉴런&quot;,&quot;감각 기관에서 수용한 자극을 연합 뉴런으로 전달한다.&quot;,&quot;뉴런의 종류&quot;],
[&quot;연합 뉴런&quot;,&quot;전달받은 자극을 종합하고 판단하여 적절한 명령을 내린다.&quot;,&quot;뉴런의 종류&quot;],
[&quot;운동 뉴런&quot;,&quot;연합 뉴런의 명령을 반응 기관에 전달한다.&quot;,&quot;뉴런의 종류&quot;],
[&quot;자극의 전달 경로&quot;,&quot;자극 → 감각 기관 → 감각 뉴런 → 연합 뉴런 → 운동 뉴런 → 반응 기관 → 반응&quot;,&quot;전달 경로&quot;],
[&quot;중추 신경계&quot;,&quot;뇌와 척수로 이루어지고 자극에 대해 판단하고 명령을 내린다.&quot;,&quot;신경계&quot;],
[&quot;말초 신경계&quot;,&quot;감각 신경과 운동 신경으로 이루어져 중추와 온몸을 연결한다.&quot;,&quot;신경계&quot;],
[&quot;대뇌&quot;,&quot;자극을 종합하여 명령을 내리고 기억, 추리, 판단, 감정 등을 담당한다.&quot;,&quot;뇌&quot;],
[&quot;간뇌&quot;,&quot;체온 조절과 체액 농도 유지 등 몸의 상태를 일정하게 유지한다.&quot;,&quot;뇌&quot;],
[&quot;중간뇌&quot;,&quot;눈의 운동과 동공의 크기 조절 등 눈의 조절을 담당한다.&quot;,&quot;뇌&quot;],
[&quot;소뇌&quot;,&quot;근육 운동을 조절하고 몸의 자세와 균형을 유지한다.&quot;,&quot;뇌&quot;],
[&quot;연수&quot;,&quot;심장 박동, 소화 운동, 호흡 운동 등 생명 유지 기능을 조절한다.&quot;,&quot;뇌&quot;],
[&quot;척수&quot;,&quot;뇌와 말초 신경 사이의 정보 전달 통로이며 무조건 반사의 중추이다.&quot;,&quot;신경계&quot;],
[&quot;체성 신경&quot;,&quot;중추 신경계의 명령을 근육으로 전달하여 몸의 움직임에 관여한다.&quot;,&quot;말초 신경&quot;],
[&quot;자율 신경&quot;,&quot;대뇌의 명령 없이 내장 기관의 운동을 조절한다.&quot;,&quot;말초 신경&quot;],
[&quot;교감 신경&quot;,&quot;몸을 긴장 상태로 만들어 심장 박동과 호흡 운동을 촉진하고 소화 운동을 억제한다.&quot;,&quot;자율 신경&quot;],
[&quot;부교감 신경&quot;,&quot;몸을 안정 상태로 만들어 심장 박동과 호흡 운동을 억제하고 소화 운동을 촉진한다.&quot;,&quot;자율 신경&quot;]
]},
{id:&quot;4-2-2&quot;,title:&quot;호르몬과 항상성&quot;,area:&quot;자극과 반응&quot;,color:&quot;#8c62aa&quot;,items:[
[&quot;호르몬&quot;,&quot;내분비샘에서 만들어져 혈액으로 분비되고 몸의 기능을 조절하는 물질이다.&quot;,&quot;호르몬&quot;],
[&quot;내분비샘&quot;,&quot;호르몬을 만들어 혈액으로 분비하는 기관이다.&quot;,&quot;호르몬&quot;],
[&quot;표적 기관&quot;,&quot;호르몬이 혈액을 통해 이동한 뒤 작용하는 특정 기관이다.&quot;,&quot;호르몬&quot;],
[&quot;생장 호르몬&quot;,&quot;뇌하수체에서 분비되며 뼈와 근육의 생장을 촉진한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;갑상샘 자극 호르몬&quot;,&quot;뇌하수체에서 분비되며 갑상샘의 티록신 분비를 촉진한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;항이뇨 호르몬&quot;,&quot;뇌하수체에서 분비되며 콩팥에서 물의 재흡수를 촉진한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;티록신&quot;,&quot;갑상샘에서 분비되며 세포 호흡을 촉진하고 체온 유지에 관여한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;아드레날린&quot;,&quot;부신에서 분비되며 혈압, 심장 박동, 혈당량을 증가시킨다.&quot;,&quot;호르몬 종류&quot;],
[&quot;인슐린&quot;,&quot;이자에서 분비되며 혈당량을 감소시킨다.&quot;,&quot;호르몬 종류&quot;],
[&quot;글루카곤&quot;,&quot;이자에서 분비되며 혈당량을 증가시킨다.&quot;,&quot;호르몬 종류&quot;],
[&quot;에스트로젠&quot;,&quot;난소에서 분비되며 여성의 2차 성징 발현에 관여한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;테스토스테론&quot;,&quot;정소에서 분비되며 남성의 2차 성징 발현에 관여한다.&quot;,&quot;호르몬 종류&quot;],
[&quot;거인증&quot;,&quot;성장기에 생장 호르몬이 과다 분비되어 키가 비정상적으로 크게 자라는 증상이다.&quot;,&quot;호르몬 질병&quot;],
[&quot;소인증&quot;,&quot;성장기에 생장 호르몬이 부족하여 키가 비정상적으로 작아지는 증상이다.&quot;,&quot;호르몬 질병&quot;],
[&quot;말단 비대증&quot;,&quot;성장기 이후 생장 호르몬이 과다 분비되어 손, 발, 코 등이 커지는 증상이다.&quot;,&quot;호르몬 질병&quot;],
[&quot;갑상샘 기능 항진증&quot;,&quot;티록신이 과다 분비되어 체중 감소와 안구 돌출 등이 나타난다.&quot;,&quot;호르몬 질병&quot;],
[&quot;갑상샘 기능 저하증&quot;,&quot;티록신이 부족하여 체중 증가와 추위를 잘 타는 증상이 나타난다.&quot;,&quot;호르몬 질병&quot;],
[&quot;당뇨병&quot;,&quot;인슐린이 부족하여 오줌에 당이 섞여 배설되고 체중이 감소할 수 있다.&quot;,&quot;호르몬 질병&quot;],
[&quot;신경의 작용&quot;,&quot;뉴런으로 전달되어 빠르고 좁은 범위에 일시적으로 작용한다.&quot;,&quot;신경과 호르몬 비교&quot;],
[&quot;호르몬의 작용&quot;,&quot;혈액으로 전달되어 느리고 넓은 범위에 지속적으로 작용한다.&quot;,&quot;신경과 호르몬 비교&quot;]
]},
{id:&quot;6-1-1&quot;,title:&quot;역학적 에너지&quot;,area:&quot;에너지 전환과 보존&quot;,color:&quot;#3d8b4f&quot;,items:[
[&quot;역학적 에너지&quot;,&quot;물체의 위치 에너지와 운동 에너지의 합이다.&quot;,&quot;기본 개념&quot;],
[&quot;위치 에너지&quot;,&quot;높이가 높을수록 커지는 에너지이다.&quot;,&quot;에너지&quot;],
[&quot;운동 에너지&quot;,&quot;속력이 빠를수록 커지는 에너지이다.&quot;,&quot;에너지&quot;],
[&quot;물체가 올라갈 때&quot;,&quot;높이는 증가하고 속력은 감소하여 운동 에너지가 위치 에너지로 전환된다.&quot;,&quot;에너지 전환&quot;],
[&quot;물체가 내려갈 때&quot;,&quot;높이는 감소하고 속력은 증가하여 위치 에너지가 운동 에너지로 전환된다.&quot;,&quot;에너지 전환&quot;],
[&quot;최고점&quot;,&quot;속력이 0이면 운동 에너지가 0이고 위치 에너지가 최대이다.&quot;,&quot;위치별 에너지&quot;],
[&quot;가장 낮은 지점&quot;,&quot;높이가 가장 낮고 속력이 가장 빠르므로 운동 에너지가 최대이다.&quot;,&quot;위치별 에너지&quot;],
[&quot;역학적 에너지 보존 법칙&quot;,&quot;마찰이나 공기 저항이 없을 때 운동하는 물체의 역학적 에너지는 일정하게 보존된다.&quot;,&quot;보존 법칙&quot;],
[&quot;자유 낙하&quot;,&quot;감소한 위치 에너지의 양과 증가한 운동 에너지의 양이 같다.&quot;,&quot;보존 법칙&quot;],
[&quot;연직 위로 던진 물체&quot;,&quot;올라갈 때 운동 에너지가 위치 에너지로 전환되고 내려올 때 위치 에너지가 운동 에너지로 전환된다.&quot;,&quot;운동 상황&quot;],
[&quot;비스듬히 던져 올린 물체&quot;,&quot;마찰이 없다면 올라갈 때와 내려올 때 역학적 에너지는 일정하다.&quot;,&quot;운동 상황&quot;],
[&quot;비스듬한 운동의 최고점&quot;,&quot;수평 방향 속력이 남아 있으므로 최고점에서도 속력이 0이 아니다.&quot;,&quot;운동 상황&quot;],
[&quot;진자의 왕복 운동&quot;,&quot;가장 낮은 지점에서 운동 에너지가 최대이고 양끝에서 위치 에너지가 최대이다.&quot;,&quot;운동 상황&quot;],
[&quot;진자의 역학적 에너지&quot;,&quot;마찰이 없다면 모든 지점에서 일정하다.&quot;,&quot;운동 상황&quot;],
[&quot;위치 에너지 감소&quot;,&quot;물체가 내려갈 때 일어나며 감소한 만큼 운동 에너지가 증가한다.&quot;,&quot;에너지 변화&quot;],
[&quot;운동 에너지 감소&quot;,&quot;물체가 올라갈 때 일어나며 감소한 만큼 위치 에너지가 증가한다.&quot;,&quot;에너지 변화&quot;],
[&quot;마찰과 공기 저항&quot;,&quot;있으면 역학적 에너지의 일부가 열에너지 등으로 전환되어 역학적 에너지가 보존되지 않는다.&quot;,&quot;보존 조건&quot;],
[&quot;기준면&quot;,&quot;위치 에너지를 정할 때 높이의 기준이 되는 면이다.&quot;,&quot;기본 개념&quot;]
]}
];
const state={view:&quot;home&quot;,unit:0,card:0,open:false,questions:[],q:0,score:0,locked:false,wrong:[]};
const app=document.getElementById(&quot;app&quot;),toast=document.getElementById(&quot;toast&quot;);
const $=s=&gt;document.querySelector(s), $$=s=&gt;document.querySelectorAll(s);
const unit=()=&gt;DATA[state.unit];
function shuffle(a){return [...a].sort(()=&gt;Math.random()-.5)}
function choicePool(key){return shuffle(DATA.flatMap(u=&gt;u.items.map(x=&gt;key===&quot;term&quot;?x[0]:x[1]))).filter((v,i,a)=&gt;a.indexOf(v)===i)}
function makeQuestions(){
  const u=unit(), poolTerm=choicePool(&quot;term&quot;), poolDesc=choicePool(&quot;desc&quot;);
  const qs=[];
  for(let i=0;i&lt;20;i++){
    const item=u.items[i%u.items.length], mode=i%2;
    if(mode===0){
      const choices=shuffle([item[0],...poolTerm.filter(x=&gt;x!==item[0]).slice(0,3)]);
      qs.push({type:item[2],question:`다음 설명에 알맞은 개념은?\n${item[1]}`,answer:item[0],choices,explain:`${item[0]}: ${item[1]}`});
    }else{
      const choices=shuffle([item[1],...poolDesc.filter(x=&gt;x!==item[1]).slice(0,3)]);
      qs.push({type:item[2],question:`'${item[0]}'에 대한 설명으로 옳은 것은?`,answer:item[1],choices,explain:`${item[0]}: ${item[1]}`});
    }
  }
  return shuffle(qs);
}
function setView(v){state.view=v;if(v===&quot;study&quot;){state.open=false} if(v===&quot;quiz&quot;){state.questions=[]} render()}
function render(){
  document.documentElement.style.setProperty(&quot;--unit&quot;,unit().color);
  $$(&quot;.bottom button&quot;).forEach(b=&gt;b.classList.toggle(&quot;active&quot;,b.dataset.view===state.view));
  if(state.view===&quot;home&quot;) renderHome();
  if(state.view===&quot;study&quot;) renderStudy();
  if(state.view===&quot;quiz&quot;) renderQuizStart();
}
function renderHome(){
  app.innerHTML=`&lt;section class=&quot;hero&quot;&gt;&lt;div class=&quot;eyebrow&quot;&gt;Middle School Science 3&lt;/div&gt;&lt;h1&gt;중3 과학 시험 대비&lt;/h1&gt;&lt;p&gt;PDF 요점정리와 암기노트의 핵심 개념을 단원별 코넬형 카드와 4지선다 문제로 정리했습니다.&lt;/p&gt;&lt;/section&gt;
  &lt;div class=&quot;summary&quot;&gt;&lt;div&gt;&lt;strong&gt;${DATA.length}&lt;/strong&gt;&lt;span&gt;소단원&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;span&gt;단원별 문항&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;무제한&lt;/strong&gt;&lt;span&gt;풀이 시간&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;div class=&quot;unit-grid&quot;&gt;${DATA.map((u,i)=&gt;`&lt;button class=&quot;unit ${i===state.unit?&quot;selected&quot;:&quot;&quot;}&quot; data-unit=&quot;${i}&quot; style=&quot;--unit:${u.color}&quot;&gt;&lt;span class=&quot;tag&quot;&gt;${u.id}&lt;/span&gt;&lt;b&gt;${u.title}&lt;/b&gt;&lt;span&gt;${u.area} · 핵심 카드 ${u.items.length}개 · 시험 20문항&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;`;
  app.querySelectorAll(&quot;[data-unit]&quot;).forEach(btn=&gt;btn.onclick=()=&gt;{state.unit=Number(btn.dataset.unit);state.card=0;state.open=false;renderHome();toastMsg(`${unit().title} 선택`);});
}
function renderStudy(){
  const u=unit(), item=u.items[state.card%u.items.length];
  app.innerHTML=`&lt;div class=&quot;controls&quot;&gt;&lt;select class=&quot;select&quot; id=&quot;unitSelect&quot;&gt;${DATA.map((x,i)=&gt;`&lt;option value=&quot;${i}&quot; ${i===state.unit?&quot;selected&quot;:&quot;&quot;}&gt;${x.id} ${x.title}&lt;/option&gt;`).join(&quot;&quot;)}&lt;/select&gt;&lt;select class=&quot;select&quot; id=&quot;cardSelect&quot;&gt;${u.items.map((x,i)=&gt;`&lt;option value=&quot;${i}&quot; ${i===state.card?&quot;selected&quot;:&quot;&quot;}&gt;${i+1}. ${x[0]}&lt;/option&gt;`).join(&quot;&quot;)}&lt;/select&gt;&lt;/div&gt;
  &lt;div class=&quot;seg&quot;&gt;&lt;button class=&quot;active&quot;&gt;코넬 암기&lt;/button&gt;&lt;button id=&quot;goQuiz&quot;&gt;4지선다 시험&lt;/button&gt;&lt;/div&gt;
  &lt;article class=&quot;cornell&quot;&gt;
    &lt;section class=&quot;cue&quot;&gt;&lt;span class=&quot;label&quot;&gt;CUE&lt;/span&gt;&lt;h2&gt;${item[0]}&lt;/h2&gt;&lt;p&gt;${item[2]}&lt;/p&gt;&lt;/section&gt;
    &lt;section class=&quot;note&quot;&gt;&lt;span class=&quot;label&quot;&gt;NOTE&lt;/span&gt;&lt;h3&gt;${u.title}&lt;/h3&gt;${state.open?`&lt;div class=&quot;open-note&quot;&gt;&lt;p&gt;${item[1]}&lt;/p&gt;&lt;p&gt;&lt;b&gt;시험 포인트&lt;/b&gt;&lt;br&gt;${makePoint(item)}&lt;/p&gt;&lt;/div&gt;`:`&lt;button class=&quot;hidden-note&quot; id=&quot;openCard&quot;&gt;터치해서 풀이 보기&lt;/button&gt;`}&lt;/section&gt;
  &lt;/article&gt;
  &lt;div class=&quot;cardnav&quot;&gt;&lt;button id=&quot;prevCard&quot;&gt;‹&lt;/button&gt;&lt;button id=&quot;toggleCard&quot;&gt;${state.open?&quot;풀이 숨기기&quot;:&quot;풀이 보기&quot;}&lt;/button&gt;&lt;button id=&quot;nextCard&quot;&gt;›&lt;/button&gt;&lt;/div&gt;`;
  $(&quot;#unitSelect&quot;).onchange=e=&gt;{state.unit=Number(e.target.value);state.card=0;state.open=false;renderStudy()};
  $(&quot;#cardSelect&quot;).onchange=e=&gt;{state.card=Number(e.target.value);state.open=false;renderStudy()};
  $(&quot;#goQuiz&quot;).onclick=()=&gt;setView(&quot;quiz&quot;); $(&quot;#prevCard&quot;).onclick=()=&gt;{state.card=(state.card-1+u.items.length)%u.items.length;state.open=false;renderStudy()};
  $(&quot;#nextCard&quot;).onclick=()=&gt;{state.card=(state.card+1)%u.items.length;state.open=false;renderStudy()};
  $(&quot;#toggleCard&quot;).onclick=()=&gt;{state.open=!state.open;renderStudy()}; const open=$(&quot;#openCard&quot;); if(open)open.onclick=()=&gt;{state.open=true;renderStudy()};
}
function makePoint(item){return `'${item[0]}'의 뜻과 기능을 비슷한 개념과 구별할 수 있어야 합니다.`}
function renderQuizStart(){
  const u=unit();
  app.innerHTML=`&lt;div class=&quot;controls&quot;&gt;&lt;select class=&quot;select&quot; id=&quot;unitSelect&quot;&gt;${DATA.map((x,i)=&gt;`&lt;option value=&quot;${i}&quot; ${i===state.unit?&quot;selected&quot;:&quot;&quot;}&gt;${x.id} ${x.title}&lt;/option&gt;`).join(&quot;&quot;)}&lt;/select&gt;&lt;/div&gt;
  &lt;section class=&quot;quiz-start&quot;&gt;&lt;h2&gt;${u.id} ${u.title}&lt;/h2&gt;&lt;p&gt;핵심 개념과 설명을 섞어 묻는 4지선다 시험입니다. 한 문제를 풀면 바로 풀이가 나옵니다.&lt;/p&gt;&lt;div class=&quot;rules&quot;&gt;&lt;div&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;span&gt;문항&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;span&gt;지선다&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;무제한&lt;/strong&gt;&lt;span&gt;시간&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;startQuiz&quot;&gt;시험 시작&lt;/button&gt;&lt;/section&gt;`;
  $(&quot;#unitSelect&quot;).onchange=e=&gt;{state.unit=Number(e.target.value);renderQuizStart()};
  $(&quot;#startQuiz&quot;).onclick=()=&gt;{state.questions=makeQuestions();state.q=0;state.score=0;state.wrong=[];state.locked=false;renderQuestion()};
}
function renderQuestion(){
  const q=state.questions[state.q], pct=((state.q)/state.questions.length*100).toFixed(1)+&quot;%&quot;;
  app.innerHTML=`&lt;div class=&quot;qtop&quot;&gt;&lt;div class=&quot;progress&quot; style=&quot;--p:${pct}&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;counter&quot;&gt;${state.q+1}/${state.questions.length}&lt;/div&gt;&lt;/div&gt;
  &lt;section class=&quot;qcard&quot;&gt;&lt;div class=&quot;meta&quot;&gt;${unit().id} ${unit().title} · ${q.type}&lt;/div&gt;&lt;h2&gt;${q.question}&lt;/h2&gt;&lt;div class=&quot;choices&quot;&gt;${q.choices.map((c,i)=&gt;`&lt;button class=&quot;choice&quot; data-choice=&quot;${escapeHtml(c)}&quot;&gt;&lt;b&gt;${i+1}&lt;/b&gt;&lt;span&gt;${c}&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;&lt;div id=&quot;explain&quot;&gt;&lt;/div&gt;&lt;/section&gt;`;
  app.querySelectorAll(&quot;.choice&quot;).forEach(btn=&gt;btn.onclick=()=&gt;answer(btn.dataset.choice));
}
function answer(v){
  if(state.locked)return; state.locked=true; const q=state.questions[state.q], ok=v===q.answer;
  if(ok)state.score++; else state.wrong.push({q:q.question,a:q.answer});
  app.querySelectorAll(&quot;.choice&quot;).forEach(btn=&gt;{btn.disabled=true;if(btn.dataset.choice===q.answer)btn.classList.add(&quot;correct&quot;);else if(btn.dataset.choice===v)btn.classList.add(&quot;wrong&quot;)});
  $(&quot;#explain&quot;).innerHTML=`&lt;div class=&quot;explain&quot;&gt;&lt;b&gt;${ok?&quot;정답&quot;:&quot;오답&quot;}&lt;/b&gt;&lt;br&gt;${q.explain}&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;margin-top:12px&quot;&gt;${state.q===state.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;`;
  $(&quot;#nextQ&quot;).onclick=()=&gt;{state.q++;state.locked=false;state.q&gt;=state.questions.length?renderResult():renderQuestion()};
}
function renderResult(){
  const u=unit(), rate=Math.round(state.score/state.questions.length*100);
  app.innerHTML=`&lt;section class=&quot;result&quot;&gt;&lt;h2&gt;${u.title} 결과&lt;/h2&gt;&lt;div class=&quot;score&quot; style=&quot;--score:${rate}%&quot;&gt;${rate}&lt;/div&gt;&lt;p&gt;&lt;b&gt;${state.score}/${state.questions.length}문항 정답&lt;/b&gt;&lt;/p&gt;${state.wrong.length?`&lt;div class=&quot;wrong-list&quot;&gt;${state.wrong.slice(0,6).map(w=&gt;`&lt;div&gt;&lt;b&gt;정답: ${w.a}&lt;/b&gt;&lt;br&gt;${w.q}&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`:`&lt;p&gt;틀린 문제가 없습니다.&lt;/p&gt;`}&lt;button class=&quot;primary&quot; id=&quot;shareResult&quot;&gt;결과 전송&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;retry&quot; style=&quot;margin-top:8px&quot;&gt;다시 풀기&lt;/button&gt;&lt;/section&gt;`;
  $(&quot;#retry&quot;).onclick=()=&gt;renderQuizStart(); $(&quot;#shareResult&quot;).onclick=shareResult;
}
function shareResult(){
  if(!state.questions.length){
    const text=`YM 중3 과학 코넬 암기와 4지선다: ${DATA.map(u=&gt;u.id+&quot; &quot;+u.title).join(&quot;, &quot;)}`;
    if(navigator.share){navigator.share({title:&quot;YM 중3 과학&quot;,text}).catch(()=&gt;copyText(text));}else copyText(text);
    return;
  }
  const text=`YM 중3 과학 ${unit().id} ${unit().title} 결과: ${state.score}/${state.questions.length}점`;
  if(navigator.share){navigator.share({title:&quot;중3 과학 시험 결과&quot;,text}).catch(()=&gt;copyText(text));}else copyText(text);
}
function copyText(t){navigator.clipboard?.writeText(t);toastMsg(&quot;결과를 복사했습니다. 카카오톡에 붙여넣기 하세요.&quot;);}
function toastMsg(t){toast.textContent=t;toast.classList.add(&quot;show&quot;);setTimeout(()=&gt;toast.classList.remove(&quot;show&quot;),1800)}
function escapeHtml(s){return String(s).replace(/[&amp;&lt;&gt;&quot;']/g,m=&gt;({&quot;&amp;&quot;:&quot;&amp;amp;&quot;,&quot;&lt;&quot;:&quot;&amp;lt;&quot;,&quot;&gt;&quot;:&quot;&amp;gt;&quot;,&quot;\&quot;&quot;:&quot;&amp;quot;&quot;,&quot;'&quot;:&quot;&amp;#39;&quot;}[m]))}
document.querySelectorAll(&quot;.bottom button&quot;).forEach(b=&gt;b.onclick=()=&gt;setView(b.dataset.view));
document.getElementById(&quot;homeBtn&quot;).onclick=()=&gt;setView(&quot;home&quot;);
document.getElementById(&quot;shareTop&quot;).onclick=shareResult;
render();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>내신 중등/동성중</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/394</guid>
      <comments>https://ymedu.tistory.com/394#entry394comment</comments>
      <pubDate>Wed, 1 Jul 2026 18:05:46 +0900</pubDate>
    </item>
    <item>
      <title>불규칙 동사</title>
      <link>https://ymedu.tistory.com/393</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot;&gt;
&lt;meta name=&quot;theme-color&quot; content=&quot;#263f5f&quot;&gt;
&lt;title&gt;YM 불규칙 일반동사 시험&lt;/title&gt;
&lt;style&gt;
:root{--ink:#20242a;--muted:#68737d;--line:#dbe3e8;--paper:#fff;--soft:#f3f7fa;--brand:#263f5f;--brand2:#1b2d45;--accent:#c0643e;--ok:#257a55;--bad:#b53e3e;--shadow:0 10px 28px rgba(32,36,42,.12)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{background:#e8eef1;color:var(--ink);font-family:&quot;Pretendard&quot;,&quot;Noto Sans KR&quot;,&quot;Malgun Gothic&quot;,system-ui,sans-serif;font-size:17px;line-height:1.46;letter-spacing:0}button,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}.app{width:min(100%,760px);min-height:100svh;margin:auto;background:var(--paper)}header{position:relative;z-index:20;padding:8px 10px;border-bottom:1px solid var(--line);background:#fff}h1{margin:0;font-size:20px;font-weight:950;color:var(--brand2)}header small{display:block;color:var(--muted);font-size:12px;font-weight:850}.top{display:flex;justify-content:space-between;gap:8px;align-items:start}.best{font-size:14px;color:var(--brand);font-weight:950}.controls{display:grid;grid-template-columns:1.25fr .75fr;gap:6px;margin-top:7px}.select{min-height:39px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:0 9px;font-weight:900;color:var(--ink)}.tabs{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:6px}.tab{min-height:38px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--brand2);font-weight:950;font-size:14px}.tab.active{background:var(--brand);border-color:var(--brand);color:#fff}main{padding:12px 10px 28px}.rules{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:10px}.rules div{padding:10px 5px;border-radius:8px;background:var(--soft);text-align:center}.rules strong{display:block;font-size:20px;color:var(--brand2)}.rules span{font-size:12px;color:var(--muted);font-weight:850}.card{border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow);overflow:hidden}.hero{display:grid;place-items:center;min-height:155px;padding:16px;background:linear-gradient(135deg,#eaf5f7,#fff7ef);text-align:center}.hero .word{font-size:44px;line-height:1;font-weight:950;color:var(--brand2)}.body{padding:15px}.forms{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:12px 0}.forms div{padding:11px 6px;border-radius:8px;background:var(--soft);text-align:center}.forms b{display:block;font-size:18px;color:var(--brand2)}.forms span{font-size:11px;color:var(--muted);font-weight:850}.meaning{font-size:18px;font-weight:900;color:var(--brand2)}.note{margin-top:10px;padding:11px;border-radius:8px;background:#fff7ef;color:#74432d;font-weight:850}.nav{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin-top:9px}.primary,.secondary{min-height:46px;border-radius:8px;font-weight:950}.primary{border:0;background:var(--accent);color:#fff}.secondary{border:1px solid var(--line);background:#fff;color:var(--ink)}.count{text-align:center;margin:8px 0;color:var(--muted);font-size:14px;font-weight:900}.quiz-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.quiz-head h2{margin:0;font-size:19px;color:var(--brand2)}.timer{display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--brand);color:#fff;font-weight:950}.timer.danger{background:var(--bad)}.bar{height:7px;border-radius:999px;background:#e6edf1;overflow:hidden;margin-bottom:9px}.bar i{display:block;height:100%;background:var(--accent)}.question{padding:13px;border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow)}.prompt{padding:14px;border-radius:8px;background:var(--soft);font-size:20px;font-weight:950;color:var(--brand2)}.hint{margin-top:5px;color:var(--muted);font-size:14px;font-weight:850}.choices{display:grid;gap:8px;margin-top:11px}.choice{display:grid;grid-template-columns:32px 1fr;gap:9px;align-items:center;width:100%;min-height:50px;padding:9px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;font-weight:900}.choice b{display:grid;place-items:center;width:29px;height:29px;border-radius:50%;background:var(--soft);font-size:14px}.choice.correct{border-color:var(--ok);background:#eaf7ef;color:var(--ok)}.choice.wrong{border-color:var(--bad);background:#fff0f0;color:var(--bad)}.choice:disabled{opacity:1}.feedback{margin-top:10px;padding:11px;border-radius:8px;background:var(--soft);font-size:16px;line-height:1.5;font-weight:850}.feedback.ok{background:#eaf7ef;color:var(--ok)}.feedback.bad{background:#fff0f0;color:var(--bad)}.result{padding:20px 13px;text-align:center;border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow)}.score{font-size:58px;line-height:1;color:var(--brand2);font-weight:950}.wrong-list{margin-top:15px;text-align:left}.wrong{padding:10px 0;border-top:1px solid var(--line);font-size:16px}
@media(max-width:430px){body{font-size:16px}header{padding:7px 8px}h1{font-size:17px}header small{font-size:10px}.best{font-size:12px}.controls{grid-template-columns:1.22fr .78fr;gap:5px;margin-top:6px}.select{min-height:36px;font-size:14px;padding:0 6px}.tabs{grid-template-columns:repeat(3,1fr);gap:4px;margin-top:5px}.tab{min-height:35px;font-size:13px}main{padding:8px 8px 20px}.rules{gap:5px;margin-bottom:8px}.rules div{padding:7px 3px}.hero{min-height:125px}.hero .word{font-size:36px}.prompt{font-size:18px}.choice{font-size:15px}.primary,.secondary{min-height:42px;font-size:15px}.rules strong{font-size:18px}.rules span{font-size:10px}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;app&quot;&gt;
&lt;header&gt;&lt;div class=&quot;top&quot;&gt;&lt;div&gt;&lt;h1&gt;YM 불규칙 일반동사 시험&lt;/h1&gt;&lt;small&gt;단계별 20개 · 의미/과거/과거분사/종합 선택&lt;/small&gt;&lt;/div&gt;&lt;div class=&quot;best&quot; id=&quot;best&quot;&gt;최고 0점&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;controls&quot;&gt;&lt;select id=&quot;stageSelect&quot; class=&quot;select&quot;&gt;&lt;/select&gt;&lt;select id=&quot;typeSelect&quot; class=&quot;select&quot;&gt;&lt;/select&gt;&lt;/div&gt;&lt;div class=&quot;tabs&quot;&gt;&lt;button class=&quot;tab active&quot; data-mode=&quot;study&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;tab&quot; data-mode=&quot;practice&quot;&gt;연습&lt;/button&gt;&lt;button class=&quot;tab&quot; data-mode=&quot;final&quot;&gt;최종테스트&lt;/button&gt;&lt;/div&gt;&lt;/header&gt;
&lt;main id=&quot;screen&quot;&gt;&lt;/main&gt;
&lt;/div&gt;
&lt;script&gt;
const VERBS=[
[&quot;cut&quot;,&quot;cut&quot;,&quot;cut&quot;,&quot;자르다&quot;,&quot;AAA&quot;],[&quot;hit&quot;,&quot;hit&quot;,&quot;hit&quot;,&quot;치다, 때리다&quot;,&quot;AAA&quot;],[&quot;hurt&quot;,&quot;hurt&quot;,&quot;hurt&quot;,&quot;다치게 하다, 아프다&quot;,&quot;AAA&quot;],[&quot;let&quot;,&quot;let&quot;,&quot;let&quot;,&quot;~하게 허락하다&quot;,&quot;AAA&quot;],[&quot;put&quot;,&quot;put&quot;,&quot;put&quot;,&quot;놓다, 두다&quot;,&quot;AAA&quot;],[&quot;set&quot;,&quot;set&quot;,&quot;set&quot;,&quot;놓다, 설정하다&quot;,&quot;AAA&quot;],[&quot;shut&quot;,&quot;shut&quot;,&quot;shut&quot;,&quot;닫다&quot;,&quot;AAA&quot;],[&quot;spread&quot;,&quot;spread&quot;,&quot;spread&quot;,&quot;퍼지다, 펼치다&quot;,&quot;AAA&quot;],[&quot;cost&quot;,&quot;cost&quot;,&quot;cost&quot;,&quot;비용이 들다&quot;,&quot;AAA&quot;],[&quot;read&quot;,&quot;read&quot;,&quot;read&quot;,&quot;읽다&quot;,&quot;AAA&quot;],[&quot;quit&quot;,&quot;quit&quot;,&quot;quit&quot;,&quot;그만두다&quot;,&quot;AAA&quot;],[&quot;burst&quot;,&quot;burst&quot;,&quot;burst&quot;,&quot;터지다&quot;,&quot;AAA&quot;],
[&quot;bring&quot;,&quot;brought&quot;,&quot;brought&quot;,&quot;가져오다&quot;,&quot;ABB&quot;],[&quot;buy&quot;,&quot;bought&quot;,&quot;bought&quot;,&quot;사다&quot;,&quot;ABB&quot;],[&quot;catch&quot;,&quot;caught&quot;,&quot;caught&quot;,&quot;잡다, 타다&quot;,&quot;ABB&quot;],[&quot;feel&quot;,&quot;felt&quot;,&quot;felt&quot;,&quot;느끼다&quot;,&quot;ABB&quot;],[&quot;find&quot;,&quot;found&quot;,&quot;found&quot;,&quot;찾다&quot;,&quot;ABB&quot;],[&quot;get&quot;,&quot;got&quot;,&quot;got&quot;,&quot;얻다, 도착하다&quot;,&quot;ABB&quot;],[&quot;have&quot;,&quot;had&quot;,&quot;had&quot;,&quot;가지다, 먹다&quot;,&quot;ABB&quot;],[&quot;hear&quot;,&quot;heard&quot;,&quot;heard&quot;,&quot;듣다&quot;,&quot;ABB&quot;],
[&quot;hold&quot;,&quot;held&quot;,&quot;held&quot;,&quot;잡고 있다, 열다&quot;,&quot;ABB&quot;],[&quot;keep&quot;,&quot;kept&quot;,&quot;kept&quot;,&quot;유지하다&quot;,&quot;ABB&quot;],[&quot;leave&quot;,&quot;left&quot;,&quot;left&quot;,&quot;떠나다, 남기다&quot;,&quot;ABB&quot;],[&quot;lose&quot;,&quot;lost&quot;,&quot;lost&quot;,&quot;잃다, 지다&quot;,&quot;ABB&quot;],[&quot;make&quot;,&quot;made&quot;,&quot;made&quot;,&quot;만들다&quot;,&quot;ABB&quot;],[&quot;meet&quot;,&quot;met&quot;,&quot;met&quot;,&quot;만나다&quot;,&quot;ABB&quot;],[&quot;pay&quot;,&quot;paid&quot;,&quot;paid&quot;,&quot;지불하다&quot;,&quot;ABB&quot;],[&quot;say&quot;,&quot;said&quot;,&quot;said&quot;,&quot;말하다&quot;,&quot;ABB&quot;],[&quot;sell&quot;,&quot;sold&quot;,&quot;sold&quot;,&quot;팔다&quot;,&quot;ABB&quot;],[&quot;send&quot;,&quot;sent&quot;,&quot;sent&quot;,&quot;보내다&quot;,&quot;ABB&quot;],[&quot;sit&quot;,&quot;sat&quot;,&quot;sat&quot;,&quot;앉다&quot;,&quot;ABB&quot;],[&quot;sleep&quot;,&quot;slept&quot;,&quot;slept&quot;,&quot;자다&quot;,&quot;ABB&quot;],
[&quot;stand&quot;,&quot;stood&quot;,&quot;stood&quot;,&quot;서다&quot;,&quot;ABB&quot;],[&quot;teach&quot;,&quot;taught&quot;,&quot;taught&quot;,&quot;가르치다&quot;,&quot;ABB&quot;],[&quot;tell&quot;,&quot;told&quot;,&quot;told&quot;,&quot;말하다, 알려주다&quot;,&quot;ABB&quot;],[&quot;think&quot;,&quot;thought&quot;,&quot;thought&quot;,&quot;생각하다&quot;,&quot;ABB&quot;],[&quot;win&quot;,&quot;won&quot;,&quot;won&quot;,&quot;이기다&quot;,&quot;ABB&quot;],[&quot;build&quot;,&quot;built&quot;,&quot;built&quot;,&quot;짓다&quot;,&quot;ABB&quot;],[&quot;lend&quot;,&quot;lent&quot;,&quot;lent&quot;,&quot;빌려주다&quot;,&quot;ABB&quot;],[&quot;spend&quot;,&quot;spent&quot;,&quot;spent&quot;,&quot;쓰다, 보내다&quot;,&quot;ABB&quot;],
[&quot;begin&quot;,&quot;began&quot;,&quot;begun&quot;,&quot;시작하다&quot;,&quot;ABC&quot;],[&quot;bite&quot;,&quot;bit&quot;,&quot;bitten&quot;,&quot;물다&quot;,&quot;ABC&quot;],[&quot;blow&quot;,&quot;blew&quot;,&quot;blown&quot;,&quot;불다&quot;,&quot;ABC&quot;],[&quot;break&quot;,&quot;broke&quot;,&quot;broken&quot;,&quot;깨다, 부수다&quot;,&quot;ABC&quot;],[&quot;choose&quot;,&quot;chose&quot;,&quot;chosen&quot;,&quot;고르다&quot;,&quot;ABC&quot;],[&quot;do&quot;,&quot;did&quot;,&quot;done&quot;,&quot;하다&quot;,&quot;ABC&quot;],[&quot;draw&quot;,&quot;drew&quot;,&quot;drawn&quot;,&quot;그리다, 끌다&quot;,&quot;ABC&quot;],[&quot;drink&quot;,&quot;drank&quot;,&quot;drunk&quot;,&quot;마시다&quot;,&quot;ABC&quot;],[&quot;drive&quot;,&quot;drove&quot;,&quot;driven&quot;,&quot;운전하다&quot;,&quot;ABC&quot;],[&quot;eat&quot;,&quot;ate&quot;,&quot;eaten&quot;,&quot;먹다&quot;,&quot;ABC&quot;],
[&quot;fall&quot;,&quot;fell&quot;,&quot;fallen&quot;,&quot;떨어지다, 넘어지다&quot;,&quot;ABC&quot;],[&quot;fly&quot;,&quot;flew&quot;,&quot;flown&quot;,&quot;날다&quot;,&quot;ABC&quot;],[&quot;forget&quot;,&quot;forgot&quot;,&quot;forgotten&quot;,&quot;잊다&quot;,&quot;ABC&quot;],[&quot;freeze&quot;,&quot;froze&quot;,&quot;frozen&quot;,&quot;얼다&quot;,&quot;ABC&quot;],[&quot;give&quot;,&quot;gave&quot;,&quot;given&quot;,&quot;주다&quot;,&quot;ABC&quot;],[&quot;go&quot;,&quot;went&quot;,&quot;gone&quot;,&quot;가다&quot;,&quot;ABC&quot;],[&quot;grow&quot;,&quot;grew&quot;,&quot;grown&quot;,&quot;자라다&quot;,&quot;ABC&quot;],[&quot;know&quot;,&quot;knew&quot;,&quot;known&quot;,&quot;알다&quot;,&quot;ABC&quot;],[&quot;ride&quot;,&quot;rode&quot;,&quot;ridden&quot;,&quot;타다&quot;,&quot;ABC&quot;],[&quot;ring&quot;,&quot;rang&quot;,&quot;rung&quot;,&quot;울리다&quot;,&quot;ABC&quot;],
[&quot;rise&quot;,&quot;rose&quot;,&quot;risen&quot;,&quot;오르다, 일어나다&quot;,&quot;ABC&quot;],[&quot;see&quot;,&quot;saw&quot;,&quot;seen&quot;,&quot;보다&quot;,&quot;ABC&quot;],[&quot;sing&quot;,&quot;sang&quot;,&quot;sung&quot;,&quot;노래하다&quot;,&quot;ABC&quot;],[&quot;speak&quot;,&quot;spoke&quot;,&quot;spoken&quot;,&quot;말하다&quot;,&quot;ABC&quot;],[&quot;steal&quot;,&quot;stole&quot;,&quot;stolen&quot;,&quot;훔치다&quot;,&quot;ABC&quot;],[&quot;swim&quot;,&quot;swam&quot;,&quot;swum&quot;,&quot;수영하다&quot;,&quot;ABC&quot;],[&quot;take&quot;,&quot;took&quot;,&quot;taken&quot;,&quot;가지고 가다, 찍다&quot;,&quot;ABC&quot;],[&quot;throw&quot;,&quot;threw&quot;,&quot;thrown&quot;,&quot;던지다&quot;,&quot;ABC&quot;],[&quot;write&quot;,&quot;wrote&quot;,&quot;written&quot;,&quot;쓰다&quot;,&quot;ABC&quot;],[&quot;wear&quot;,&quot;wore&quot;,&quot;worn&quot;,&quot;입다, 착용하다&quot;,&quot;ABC&quot;],
[&quot;deal&quot;,&quot;dealt&quot;,&quot;dealt&quot;,&quot;다루다, 거래하다&quot;,&quot;ABB&quot;],[&quot;dig&quot;,&quot;dug&quot;,&quot;dug&quot;,&quot;파다&quot;,&quot;ABB&quot;],[&quot;feed&quot;,&quot;fed&quot;,&quot;fed&quot;,&quot;먹이를 주다&quot;,&quot;ABB&quot;],[&quot;fight&quot;,&quot;fought&quot;,&quot;fought&quot;,&quot;싸우다&quot;,&quot;ABB&quot;],[&quot;hang&quot;,&quot;hung&quot;,&quot;hung&quot;,&quot;걸다, 매달다&quot;,&quot;ABB&quot;],[&quot;light&quot;,&quot;lit&quot;,&quot;lit&quot;,&quot;불을 붙이다&quot;,&quot;ABB&quot;],[&quot;stick&quot;,&quot;stuck&quot;,&quot;stuck&quot;,&quot;붙이다, 찌르다&quot;,&quot;ABB&quot;],[&quot;understand&quot;,&quot;understood&quot;,&quot;understood&quot;,&quot;이해하다&quot;,&quot;ABB&quot;],[&quot;wake&quot;,&quot;woke&quot;,&quot;woken&quot;,&quot;깨다, 깨우다&quot;,&quot;ABC&quot;],[&quot;tear&quot;,&quot;tore&quot;,&quot;torn&quot;,&quot;찢다&quot;,&quot;ABC&quot;]
].map(([base,past,pp,meaning,type])=&gt;({base,past,pp,meaning,type}));
const $=s=&gt;document.querySelector(s),screen=$(&quot;#screen&quot;),stageSelect=$(&quot;#stageSelect&quot;),typeSelect=$(&quot;#typeSelect&quot;),bestEl=$(&quot;#best&quot;);
const state={stage:0,quizType:&quot;meaning&quot;,mode:&quot;study&quot;,idx:0,questions:[],q:0,score:0,locked:false,wrong:[],timer:null,seconds:15};
const stages=[];for(let i=0;i&lt;VERBS.length;i+=20)stages.push(VERBS.slice(i,i+20));
function esc(v){return String(v).replace(/[&amp;&lt;&gt;&quot;']/g,c=&gt;({&quot;&amp;&quot;:&quot;&amp;amp;&quot;,&quot;&lt;&quot;:&quot;&amp;lt;&quot;,&quot;&gt;&quot;:&quot;&amp;gt;&quot;,'&quot;':&quot;&amp;quot;&quot;,&quot;'&quot;:&quot;&amp;#039;&quot;}[c]))}function shuffle(a){const b=[...a];for(let i=b.length-1;i&gt;0;i--){const j=Math.floor(Math.random()*(i+1));[b[i],b[j]]=[b[j],b[i]]}return b}
function key(){return`irregular-best-${state.stage}`}function best(){return Number(localStorage.getItem(key())||0)}function updateBest(){bestEl.textContent=`최고 ${best()}점`}function cur(){return stages[state.stage]}function ruleStats(){const s=cur();return{AAA:s.filter(v=&gt;v.type===&quot;AAA&quot;).length,ABB:s.filter(v=&gt;v.type===&quot;ABB&quot;).length,ABC:s.filter(v=&gt;v.type===&quot;ABC&quot;).length}}
function fillControls(){stageSelect.innerHTML=stages.map((s,i)=&gt;`&lt;option value=&quot;${i}&quot; ${i===state.stage?&quot;selected&quot;:&quot;&quot;}&gt;${i+1}단계 · ${i*20+1}-${i*20+s.length}번&lt;/option&gt;`).join(&quot;&quot;);typeSelect.innerHTML=`&lt;option value=&quot;meaning&quot; ${state.quizType===&quot;meaning&quot;?&quot;selected&quot;:&quot;&quot;}&gt;의미&lt;/option&gt;&lt;option value=&quot;past&quot; ${state.quizType===&quot;past&quot;?&quot;selected&quot;:&quot;&quot;}&gt;과거&lt;/option&gt;&lt;option value=&quot;pp&quot; ${state.quizType===&quot;pp&quot;?&quot;selected&quot;:&quot;&quot;}&gt;과거분사&lt;/option&gt;&lt;option value=&quot;all&quot; ${state.quizType===&quot;all&quot;?&quot;selected&quot;:&quot;&quot;}&gt;종합&lt;/option&gt;`;typeSelect.value=state.quizType}
function stageWords(){return cur()}
function selectedTypes(){const v=state.quizType||&quot;meaning&quot;;return v===&quot;all&quot;?[&quot;meaning&quot;,&quot;past&quot;,&quot;pp&quot;]:[v]}
function typeLabel(){return({meaning:&quot;의미&quot;,past:&quot;과거&quot;,pp:&quot;과거분사&quot;,all:&quot;종합&quot;}[state.quizType]||&quot;의미&quot;)}
function rules(){return`&lt;div class=&quot;rules&quot;&gt;&lt;div&gt;&lt;strong&gt;${state.stage+1}&lt;/strong&gt;&lt;span&gt;단계&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${stageWords().length}&lt;/strong&gt;&lt;span&gt;동사&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${typeLabel()}&lt;/strong&gt;&lt;span&gt;문제 유형&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;`}
function setMode(mode){state.mode=mode;document.querySelectorAll(&quot;.tab&quot;).forEach(b=&gt;b.classList.toggle(&quot;active&quot;,b.dataset.mode===mode));stopTimer();mode===&quot;study&quot;?renderStudy():startQuiz(mode)}
function renderStudy(){fillControls();updateBest();const words=stageWords();const v=words[state.idx%words.length];screen.innerHTML=rules()+`&lt;article class=&quot;card&quot;&gt;&lt;div class=&quot;hero&quot;&gt;&lt;div&gt;&lt;div class=&quot;word&quot;&gt;${esc(v.base)}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;body&quot;&gt;&lt;div class=&quot;meaning&quot;&gt;${esc(v.meaning)}&lt;/div&gt;&lt;div class=&quot;forms&quot;&gt;&lt;div&gt;&lt;b&gt;${esc(v.base)}&lt;/b&gt;&lt;span&gt;현재&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;${esc(v.past)}&lt;/b&gt;&lt;span&gt;과거&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;${esc(v.pp)}&lt;/b&gt;&lt;span&gt;과거분사&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;note&quot;&gt;현재형, 과거형, 과거분사를 한 번에 보고 소리 내어 암기하세요.&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;div class=&quot;count&quot;&gt;${state.idx%words.length+1} / ${words.length}&lt;/div&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;prev&quot;&gt;이전&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;random&quot;&gt;무작위&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;next&quot;&gt;다음&lt;/button&gt;&lt;/div&gt;`;$(&quot;#prev&quot;).onclick=()=&gt;{state.idx=(state.idx-1+words.length)%words.length;renderStudy()};$(&quot;#next&quot;).onclick=()=&gt;{state.idx=(state.idx+1)%words.length;renderStudy()};$(&quot;#random&quot;).onclick=()=&gt;{state.idx=Math.floor(Math.random()*words.length);renderStudy()}}
function formDistractors(v,field){const correct=v[field],base=v.base;let pool=[field===&quot;past&quot;?v.pp:v.past,base,base+&quot;ed&quot;,base+&quot;d&quot;,base.slice(0,-1)+&quot;ed&quot;,correct+&quot;ed&quot;,correct+&quot;en&quot;,correct.replace(/o/g,&quot;a&quot;),correct.replace(/a/g,&quot;u&quot;),...VERBS.filter(x=&gt;x.base[0]===base[0]).flatMap(x=&gt;[x.past,x.pp])];return uniqueChoices(correct,pool)}
function uniqueChoices(correct,pool){const out=[correct];for(const item of pool){if(item&amp;&amp;item!==correct&amp;&amp;!out.includes(item))out.push(item);if(out.length===4)break}while(out.length&lt;4){const any=VERBS[Math.floor(Math.random()*VERBS.length)];const pick=Math.random()&lt;.5?any.past:any.pp;if(!out.includes(pick))out.push(pick)}return shuffle(out)}
function meaningChoices(v){return uniqueChoices(v.meaning,VERBS.map(x=&gt;x.meaning))}
function makeQuestion(v,type){if(type===&quot;meaning&quot;)return{type,v,question:`${v.base} - ${v.past} - ${v.pp}\n의미로 알맞은 것은?`,answer:v.meaning,choices:meaningChoices(v),note:`${v.base}의 의미는 '${v.meaning}'입니다.`};if(type===&quot;past&quot;)return{type,v,question:`${v.base}의 불규칙 과거형은?`,answer:v.past,choices:formDistractors(v,&quot;past&quot;),note:`${v.base} - ${v.past} - ${v.pp} (${v.meaning})`};return{type,v,question:`${v.base}의 과거분사는?`,answer:v.pp,choices:formDistractors(v,&quot;pp&quot;),note:`${v.base} - ${v.past} - ${v.pp} (${v.meaning})`}}
function startQuiz(mode){fillControls();updateBest();const words=stageWords(),types=selectedTypes();state.questions=shuffle(words.map((v,i)=&gt;makeQuestion(v,types[i%types.length])));state.q=0;state.score=0;state.wrong=[];state.locked=false;renderQuestion();if(mode===&quot;final&quot;)startTimer()}
function renderQuestion(){if(state.q&gt;=state.questions.length)return renderResult();const q=state.questions[state.q],pct=(state.q+1)/state.questions.length*100;state.locked=false;const title=state.mode===&quot;final&quot;?&quot;최종테스트&quot;:`${typeLabel()} 연습`;screen.innerHTML=rules()+`&lt;div class=&quot;quiz-head&quot;&gt;&lt;div&gt;&lt;h2&gt;${title}&lt;/h2&gt;&lt;small&gt;${state.q+1} / ${state.questions.length} · ${state.score}개 정답&lt;/small&gt;&lt;/div&gt;${state.mode===&quot;final&quot;?`&lt;div class=&quot;timer&quot; id=&quot;timer&quot;&gt;15&lt;/div&gt;`:&quot;&quot;}&lt;/div&gt;&lt;div class=&quot;bar&quot;&gt;&lt;i style=&quot;width:${pct}%&quot;&gt;&lt;/i&gt;&lt;/div&gt;&lt;section class=&quot;question&quot;&gt;&lt;div class=&quot;prompt&quot;&gt;${esc(q.question).replace(&quot;\\n&quot;,&quot;&lt;br&gt;&quot;)}&lt;div class=&quot;hint&quot;&gt;보기 중 알맞은 답을 고르세요.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;choices&quot;&gt;${q.choices.map((c,i)=&gt;`&lt;button class=&quot;choice&quot; data-choice=&quot;${esc(c)}&quot;&gt;&lt;b&gt;${i+1}&lt;/b&gt;&lt;span&gt;${esc(c)}&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;&lt;div id=&quot;feedback&quot;&gt;&lt;/div&gt;&lt;/section&gt;`;document.querySelectorAll(&quot;.choice&quot;).forEach(btn=&gt;btn.onclick=()=&gt;answer(btn.dataset.choice))}
function answer(selected,timeout=false){if(state.locked)return;state.locked=true;stopTimer();const q=state.questions[state.q],ok=selected===q.answer;if(ok)state.score++;else state.wrong.push({q,selected:selected||&quot;시간 초과&quot;});document.querySelectorAll(&quot;.choice&quot;).forEach(btn=&gt;{btn.disabled=true;const v=btn.dataset.choice;if(v===q.answer)btn.classList.add(&quot;correct&quot;);if(v===selected&amp;&amp;!ok)btn.classList.add(&quot;wrong&quot;)});$(&quot;#feedback&quot;).innerHTML=`&lt;div class=&quot;feedback ${ok?&quot;ok&quot;:&quot;bad&quot;}&quot;&gt;&lt;strong&gt;${ok?&quot;정답입니다&quot;:&quot;오답입니다&quot;}${timeout?&quot; · 시간 초과&quot;:&quot;&quot;}&lt;/strong&gt;&lt;br&gt;정답: ${esc(q.answer)}&lt;br&gt;${esc(q.note)}&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;width:100%;margin-top:8px&quot;&gt;${state.q===state.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;`;$(&quot;#nextQ&quot;).onclick=()=&gt;{state.q++;renderQuestion();if(state.mode===&quot;final&quot;&amp;&amp;state.q&lt;state.questions.length)startTimer()}}
function startTimer(){stopTimer();state.seconds=15;const tick=()=&gt;{const t=$(&quot;#timer&quot;);if(t){t.textContent=state.seconds;t.classList.toggle(&quot;danger&quot;,state.seconds&lt;=5)}if(state.seconds&lt;=0)return answer(null,true);state.seconds--};tick();state.timer=setInterval(tick,1000)}function stopTimer(){clearInterval(state.timer);state.timer=null}
function renderResult(){stopTimer();const total=state.questions.length,score=Math.round(state.score/total*100);if(state.mode===&quot;final&quot;&amp;&amp;score&gt;best())localStorage.setItem(key(),score);updateBest();screen.innerHTML=`&lt;section class=&quot;result&quot;&gt;&lt;div class=&quot;score&quot;&gt;${score}점&lt;/div&gt;&lt;h2&gt;${state.score} / ${total}문제 정답&lt;/h2&gt;&lt;p&gt;${state.stage+1}단계 · ${state.mode===&quot;final&quot;?&quot;최종 테스트&quot;:&quot;연습&quot;}&lt;/p&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;home&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;retry&quot;&gt;다시 풀기&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;share&quot;&gt;전송&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;wrong-list&quot;&gt;&lt;h3&gt;오답 정리&lt;/h3&gt;${state.wrong.length?state.wrong.map(w=&gt;`&lt;div class=&quot;wrong&quot;&gt;&lt;b&gt;${esc(w.q.v.base)} (${w.q.v.type})&lt;/b&gt;&lt;br&gt;내 답: ${esc(w.selected)}&lt;br&gt;정답: ${esc(w.q.answer)}&lt;br&gt;${esc(w.q.v.base)} - ${esc(w.q.v.past)} - ${esc(w.q.v.pp)} · ${esc(w.q.v.meaning)}&lt;/div&gt;`).join(&quot;&quot;):`&lt;div class=&quot;wrong&quot;&gt;모든 문제를 맞혔습니다.&lt;/div&gt;`}&lt;/div&gt;&lt;/section&gt;`;$(&quot;#home&quot;).onclick=()=&gt;setMode(&quot;study&quot;);$(&quot;#retry&quot;).onclick=()=&gt;startQuiz(state.mode);$(&quot;#share&quot;).onclick=shareResult}
function shareResult(){const text=`YM 불규칙 일반동사 결과\n${state.stage+1}단계 ${state.mode===&quot;final&quot;?&quot;최종 테스트&quot;:&quot;연습&quot;}\n점수: ${state.score}/${state.questions.length} (${Math.round(state.score/state.questions.length*100)}점)`;if(navigator.share)navigator.share({title:&quot;YM 불규칙 일반동사 결과&quot;,text}).catch(()=&gt;{});else navigator.clipboard?.writeText(text).then(()=&gt;alert(&quot;결과가 복사되었습니다. 카카오톡 등에 붙여넣어 전송하세요.&quot;))}
stageSelect.onchange=()=&gt;{state.stage=Number(stageSelect.value);state.idx=0;setMode(state.mode)};typeSelect.onchange=()=&gt;{state.quizType=typeSelect.value;state.idx=0;setMode(state.mode)};document.querySelectorAll(&quot;.tab&quot;).forEach(btn=&gt;btn.onclick=()=&gt;setMode(btn.dataset.mode));fillControls();renderStudy();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>초등공부/초등영어</category>
      <category>불규칙동사</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/393</guid>
      <comments>https://ymedu.tistory.com/393#entry393comment</comments>
      <pubDate>Wed, 1 Jul 2026 17:25:39 +0900</pubDate>
    </item>
    <item>
      <title>중2 비상(황) 1~4 어법 대화문</title>
      <link>https://ymedu.tistory.com/392</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot;&gt;
  &lt;meta name=&quot;theme-color&quot; content=&quot;#294f5d&quot;&gt;
  &lt;title&gt;중2 비상(황) 1~4과 어법·대화 카드&lt;/title&gt;
  &lt;style&gt;
    :root{--ink:#20242a;--muted:#69737e;--line:#dbe2e8;--paper:#fff;--soft:#f3f7fa;--brand:#294f5d;--brand2:#1e3d47;--accent:#c0693d;--ok:#257a55;--bad:#b53e3e;--shadow:0 10px 28px rgba(32,36,42,.12)}
    *{box-sizing:border-box}html,body{margin:0;min-height:100%}body{background:#e8eef1;color:var(--ink);font-family:&quot;Pretendard&quot;,&quot;Noto Sans KR&quot;,&quot;Malgun Gothic&quot;,system-ui,sans-serif;font-size:17px;line-height:1.46;letter-spacing:0}button,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}
    .app{width:min(100%,760px);min-height:100svh;margin:auto;background:var(--paper)}header{position:sticky;top:0;z-index:20;padding:9px 10px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.96);backdrop-filter:blur(10px)}
    h1{margin:0;font-size:20px;font-weight:950;color:var(--brand2)}header small{display:block;color:var(--muted);font-size:12px;font-weight:850}.top{display:flex;justify-content:space-between;gap:8px;align-items:start}.best{font-size:14px;color:var(--brand);font-weight:950}.controls{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:9px}.select{min-height:43px;border:1px solid var(--line);border-radius:8px;background:#fff;padding:0 10px;font-weight:900;color:var(--ink)}
    .tabs{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:8px}.tab{min-height:42px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--brand2);font-weight:950}.tab.active{background:var(--brand);border-color:var(--brand);color:#fff}
    main{padding:12px 10px 26px}.rules{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-bottom:10px}.rules div{padding:10px 5px;border-radius:8px;background:var(--soft);text-align:center}.rules strong{display:block;font-size:20px;color:var(--brand2)}.rules span{font-size:12px;color:var(--muted);font-weight:850}
    .study-card{border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow);overflow:hidden}.scene{display:grid;place-items:center;min-height:160px;padding:16px;background:linear-gradient(135deg,#eaf5f7,#fff7ef);text-align:center}.scene .pic{font-size:68px;line-height:1}.scene b{display:block;margin-top:7px;font-size:18px;color:var(--brand2)}.card-body{padding:15px}.badge{display:inline-block;padding:6px 9px;border-radius:999px;background:#eaf5f7;color:var(--brand);font-size:13px;font-weight:950}.sentence{margin:12px 0 8px;font-size:22px;font-weight:950;line-height:1.38}.ko{color:var(--muted);font-size:16px;font-weight:850}.answer{display:none;margin-top:12px;padding:12px;border-radius:8px;background:var(--soft);font-size:16px;font-weight:850;line-height:1.55}.study-card.open .answer{display:block}.nav{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin-top:9px}.primary,.secondary{min-height:46px;border-radius:8px;font-weight:950}.primary{border:0;background:var(--accent);color:#fff}.secondary{border:1px solid var(--line);background:#fff;color:var(--ink)}.count{text-align:center;margin:8px 0;color:var(--muted);font-size:14px;font-weight:900}
    .quiz-head{display:flex;justify-content:space-between;align-items:end;gap:8px;margin-bottom:8px}.quiz-head h2{margin:0;font-size:19px;color:var(--brand2)}.quiz-head small{color:var(--muted);font-weight:850}.bar{height:7px;border-radius:999px;background:#e6edf1;overflow:hidden;margin-bottom:9px}.bar i{display:block;height:100%;background:var(--accent)}.question{padding:13px;border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow)}.qscene{display:grid;grid-template-columns:82px 1fr;gap:10px;align-items:center;padding:11px;border-radius:8px;background:var(--soft)}.qscene .pic{display:grid;place-items:center;width:76px;height:76px;border-radius:10px;background:#fff;font-size:40px}.prompt{font-size:18px;font-weight:950;color:var(--brand2)}.hint{margin-top:4px;color:var(--muted);font-size:14px;font-weight:850}.target{margin-top:10px;padding:12px;border:2px dashed #cfd9df;border-radius:8px;min-height:60px;background:#fbfcfd;font-size:18px;font-weight:900}.target.empty{color:#9aa4ad}.tiles{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px}.tile{min-height:40px;padding:8px 11px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:16px;font-weight:900}.tile.used{opacity:.35}.feedback{margin-top:10px;padding:11px;border-radius:8px;background:var(--soft);font-size:16px;line-height:1.5;font-weight:850}.feedback.ok{background:#eaf7ef;color:var(--ok)}.feedback.bad{background:#fff0f0;color:var(--bad)}
    .dialogue-meta{display:flex;align-items:center;gap:8px;margin-bottom:9px;color:var(--brand);font-size:14px;font-weight:950}.speaker{display:inline-grid;place-items:center;min-width:38px;height:38px;padding:0 9px;border-radius:999px;background:var(--brand);color:#fff;font-size:14px}.next-line{margin-top:10px;padding:11px;border-radius:8px;background:#fff7ef;border:1px solid #efd7c7;font-size:16px;font-weight:850;line-height:1.5}.choice4{display:grid;grid-template-columns:32px 1fr;gap:9px;align-items:center;width:100%;min-height:50px;margin-top:8px;padding:9px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;font-size:16px;font-weight:900}.choice4 b{display:grid;place-items:center;width:29px;height:29px;border-radius:50%;background:var(--soft);font-size:14px}.choice4.correct{border-color:var(--ok);background:#eaf7ef;color:var(--ok)}.choice4.wrong{border-color:var(--bad);background:#fff0f0;color:var(--bad)}.choice4:disabled{opacity:1}.result{padding:20px 13px;text-align:center;border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow)}.score{font-size:58px;line-height:1;color:var(--brand2);font-weight:950}.wrong-list{margin-top:15px;text-align:left}.wrong{padding:10px 0;border-top:1px solid var(--line);font-size:16px}
    @media(max-width:430px){body{font-size:16px}header{padding:8px}h1{font-size:18px}header small{font-size:11px}.controls{grid-template-columns:1fr}.select{min-height:40px;font-size:15px}main{padding:9px 8px 19px}.scene{min-height:136px}.scene .pic{font-size:56px}.scene b{font-size:16px}.sentence{font-size:19px}.ko,.answer,.feedback,.next-line,.choice4{font-size:15px}.qscene{grid-template-columns:64px 1fr}.qscene .pic{width:60px;height:60px;font-size:34px}.prompt{font-size:16px}.hint{font-size:13px}.target{font-size:16px}.tile{font-size:15px;padding:7px 9px}.primary,.secondary{min-height:42px;font-size:15px}.rules strong{font-size:18px}.rules span{font-size:11px}}
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;app&quot;&gt;
  &lt;header&gt;&lt;div class=&quot;top&quot;&gt;&lt;div&gt;&lt;h1&gt;중2 비상(황) 1~4과 어법·대화&lt;/h1&gt;&lt;small&gt;암기 카드 · 선택 영작 · 대화 4지선다 30문항&lt;/small&gt;&lt;/div&gt;&lt;div class=&quot;best&quot; id=&quot;best&quot;&gt;최고 0점&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;controls&quot;&gt;&lt;select id=&quot;lessonSelect&quot; class=&quot;select&quot;&gt;&lt;/select&gt;&lt;select id=&quot;grammarSelect&quot; class=&quot;select&quot;&gt;&lt;/select&gt;&lt;/div&gt;&lt;div class=&quot;tabs&quot;&gt;&lt;button class=&quot;tab active&quot; id=&quot;studyTab&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;tab&quot; id=&quot;testTab&quot;&gt;시험&lt;/button&gt;&lt;/div&gt;&lt;/header&gt;
  &lt;main id=&quot;screen&quot;&gt;&lt;/main&gt;
&lt;/div&gt;
&lt;script&gt;
function c(pic,ko,en,chunks,note){return{pic,ko,en,chunks,note}}function t(pic,ko,en,tiles,note){return{pic,ko,en,tiles,note}}function d(speaker,en,ko,note,next){return{speaker,en,ko,note,next}}function dq(type,prompt,answer,choices,note,source){return{kind:&quot;dialogue&quot;,type,prompt,answer,choices,note,source}}
function gt(pic,ko,en,note){return t(pic,ko,en,en.replace(/[,.?!]/g,&quot;&quot;).split(&quot; &quot;),note)}function mix(a){const b=[...a];for(let i=b.length-1;i&gt;0;i--){const j=Math.floor(Math.random()*(i+1));[b[i],b[j]]=[b[j],b[i]]}return b}function choices(ans,pool){return mix([ans,...pool.filter(x=&gt;x!==ans).slice(0,3)])}
function fill30(arr){let out=[];while(out.length&lt;30)out.push(...mix(arr));return out.slice(0,30)}
function dialogueTests(cards,extra=[]){const meanings=cards.map(x=&gt;x.ko),nexts=cards.map(x=&gt;x.next),built=[];cards.forEach(card=&gt;{built.push(dq(&quot;meaning&quot;,`${card.en} 의 뜻은?`,card.ko,choices(card.ko,meanings),card.note,card.speaker));built.push(dq(&quot;next&quot;,`${card.speaker}: ${card.en} 다음에 이어질 말은?`,card.next,choices(card.next,nexts),`대화 흐름상 '${card.next}'가 자연스럽다.`,card.speaker))});return fill30([...built,...extra])}
const DATA={
 &quot;1&quot;:{name:&quot;1과 취향과 물건&quot;,grammars:{
  ing:{name:&quot;어법 1. 전치사+동명사&quot;,rule:&quot;전치사 of, for, about, before 뒤에는 동사원형이 아니라 -ing 형태를 쓴다.&quot;,cards:[c(&quot; &quot;,&quot;나는 같은 음악을 듣는 것에 싫증이 났다.&quot;,&quot;I am tired of listening to the same music.&quot;,&quot;I am tired of / listening to the same music&quot;,&quot;of 뒤에는 listening을 쓴다.&quot;),c(&quot; &quot;,&quot;나는 배드민턴 동아리에 가입하는 것에 대해 생각하고 있다.&quot;,&quot;I am thinking about signing up for the badminton club.&quot;,&quot;I am thinking about / signing up for the badminton club&quot;,&quot;about 뒤에는 signing을 쓴다.&quot;),c(&quot; &quot;,&quot;온라인에서 가방을 사기 전에 무게를 확인해라.&quot;,&quot;Check the weight before buying a backpack online.&quot;,&quot;Check the weight / before buying a backpack online&quot;,&quot;before 뒤에는 buying을 쓴다.&quot;),c(&quot; &quot;,&quot;민지는 쿠키를 굽는 것을 좋아한다.&quot;,&quot;Minji likes baking cookies.&quot;,&quot;Minji likes / baking cookies&quot;,&quot;like 뒤에는 동명사를 목적어로 쓸 수 있다.&quot;)],tests:[]},
  look:{name:&quot;어법 2. look/sound/taste + 형용사&quot;,rule:&quot;look, sound, taste 뒤에는 명사보다 형용사를 써서 상태나 느낌을 나타낸다.&quot;,cards:[c(&quot; &quot;,&quot;그 가방은 가벼워 보인다.&quot;,&quot;The backpack looks light.&quot;,&quot;The backpack / looks / light&quot;,&quot;look 뒤에는 형용사 light를 쓴다.&quot;),c(&quot; &quot;,&quot;그 열쇠고리는 네게 잘 어울린다.&quot;,&quot;The key ring looks good on you.&quot;,&quot;The key ring / looks good / on you&quot;,&quot;look good on은 '~에게 잘 어울리다'이다.&quot;),c(&quot; &quot;,&quot;그 딸기 맛은 달콤한 맛이 난다.&quot;,&quot;The strawberry flavor tastes sweet.&quot;,&quot;The strawberry flavor / tastes / sweet&quot;,&quot;taste 뒤에는 형용사 sweet를 쓴다.&quot;),c(&quot; &quot;,&quot;그 밴드의 음악은 놀랍게 들린다.&quot;,&quot;The band's music sounds amazing.&quot;,&quot;The band's music / sounds / amazing&quot;,&quot;sound 뒤에는 형용사 amazing을 쓴다.&quot;)],tests:[]},
  dialogue:{kind:&quot;dialogue&quot;,name:&quot;대화. 취향 묻기와 물건 고르기&quot;,rule:&quot;좋아하는 것 묻기, 추천하기, 의견 말하기 표현을 익힌다.&quot;,cards:[d(&quot;A&quot;,&quot;What kind of music do you like?&quot;,&quot;너는 어떤 종류의 음악을 좋아하니?&quot;,&quot;kind of는 종류를 묻는다.&quot;,&quot;B: I like band music the most.&quot;),d(&quot;B&quot;,&quot;I like band music the most.&quot;,&quot;나는 밴드 음악을 가장 좋아해.&quot;,&quot;favorite와 같은 취향 표현이다.&quot;,&quot;A: Who is your favorite drummer?&quot;),d(&quot;A&quot;,&quot;Who is your favorite drummer?&quot;,&quot;네가 가장 좋아하는 드럼 연주자는 누구니?&quot;,&quot;favorite는 가장 좋아하는 대상을 묻는다.&quot;,&quot;B: Mina is my favorite drummer. She is amazing.&quot;),d(&quot;A&quot;,&quot;Which pouch do you want to choose?&quot;,&quot;너는 어떤 파우치를 고르고 싶니?&quot;,&quot;which는 선택을 묻는다.&quot;,&quot;B: I like the strawberry one. It looks tasty.&quot;),d(&quot;B&quot;,&quot;I like the strawberry one. It looks tasty.&quot;,&quot;나는 딸기 맛이 좋아. 맛있어 보여.&quot;,&quot;look + 형용사 표현을 쓴다.&quot;,&quot;A: It looks good on you.&quot;),d(&quot;A&quot;,&quot;It looks good on you.&quot;,&quot;그것은 너에게 잘 어울려.&quot;,&quot;look good on은 칭찬 표현이다.&quot;,&quot;B: Thanks. I will choose this one.&quot;)],tests:[]}
 }},
 &quot;2&quot;:{name:&quot;2과 건강과 역할&quot;,grammars:{
  advice:{name:&quot;어법 1. should/had better&quot;,rule:&quot;should와 had better 뒤에는 동사원형을 써서 충고나 조언을 나타낸다.&quot;,cards:[c(&quot; &quot;,&quot;너는 약을 먹어야 한다.&quot;,&quot;You should take some medicine.&quot;,&quot;You should / take some medicine&quot;,&quot;should 뒤에는 동사원형 take를 쓴다.&quot;),c(&quot; &quot;,&quot;너는 치과에 가는 것이 좋겠다.&quot;,&quot;You had better see a dentist.&quot;,&quot;You had better / see a dentist&quot;,&quot;had better 뒤에는 동사원형을 쓴다.&quot;),c(&quot; &quot;,&quot;너는 휴대전화를 내려놓는 것이 좋겠다.&quot;,&quot;You should put your phone down.&quot;,&quot;You should / put your phone down&quot;,&quot;put down은 내려놓다이다.&quot;),c(&quot; &quot;,&quot;너는 플래너를 사용해야 한다.&quot;,&quot;You should use a planner.&quot;,&quot;You should / use a planner&quot;,&quot;조언 표현이다.&quot;)],tests:[]},
  ask:{name:&quot;어법 2. ask/tell + 목적어 + to부정사&quot;,rule:&quot;ask/tell + 사람 + to V는 '~에게 ...하라고 부탁하다/말하다'로 쓴다.&quot;,cards:[c(&quot; &quot;,&quot;나는 친구에게 즉시 전화해 달라고 부탁했다.&quot;,&quot;I asked my friend to call right away.&quot;,&quot;I asked my friend / to call right away&quot;,&quot;ask + 사람 + to V 구조이다.&quot;),c(&quot; &quot;,&quot;선생님은 우리에게 반려동물을 돌보라고 말씀하셨다.&quot;,&quot;The teacher told us to take care of the pet.&quot;,&quot;The teacher told us / to take care of the pet&quot;,&quot;tell + 사람 + to V 구조이다.&quot;),c(&quot; &quot;,&quot;그는 나에게 천천히 숨을 쉬라고 말했다.&quot;,&quot;He told me to breathe slowly.&quot;,&quot;He told me / to breathe slowly&quot;,&quot;to breathe가 목적격 보어이다.&quot;),c(&quot; &quot;,&quot;나는 동생에게 우리 문을 열어 두라고 부탁했다.&quot;,&quot;I asked my brother to leave the cage open.&quot;,&quot;I asked my brother / to leave the cage open&quot;,&quot;ask + 목적어 + to V 구조이다.&quot;)],tests:[]},
  dialogue:{kind:&quot;dialogue&quot;,name:&quot;대화. 아픈 증상과 조언하기&quot;,rule:&quot;증상 말하기, 조언하기, 부탁하기 표현을 익힌다.&quot;,cards:[d(&quot;A&quot;,&quot;What's wrong?&quot;,&quot;무슨 일이니? 어디가 안 좋니?&quot;,&quot;상대의 상태를 묻는 표현이다.&quot;,&quot;B: I have a terrible headache.&quot;),d(&quot;B&quot;,&quot;I have a terrible headache.&quot;,&quot;머리가 너무 아파.&quot;,&quot;증상을 말한다.&quot;,&quot;A: You should put your phone down and rest.&quot;),d(&quot;A&quot;,&quot;You should put your phone down and rest.&quot;,&quot;휴대전화를 내려놓고 쉬어야 해.&quot;,&quot;should로 조언한다.&quot;,&quot;B: You're right. I used up all my energy.&quot;),d(&quot;A&quot;,&quot;Can you feed the iguana?&quot;,&quot;이구아나에게 먹이를 줄 수 있니?&quot;,&quot;Can you는 부탁 표현이다.&quot;,&quot;B: Sure. I will take care of it.&quot;),d(&quot;B&quot;,&quot;Sure. I will take care of it.&quot;,&quot;물론이야. 내가 돌볼게.&quot;,&quot;부탁을 수락한다.&quot;,&quot;A: Thanks. Please call me right away if it is gone.&quot;),d(&quot;A&quot;,&quot;Please call me right away if it is gone.&quot;,&quot;그것이 없어지면 즉시 나에게 전화해 줘.&quot;,&quot;if 조건절과 부탁 표현이다.&quot;,&quot;B: Okay. I will check the cage first.&quot;)],tests:[]}
 }},
 &quot;3&quot;:{name:&quot;3과 발명과 창의성&quot;,grammars:{
  passive:{name:&quot;어법 1. 수동태&quot;,rule:&quot;주어가 동작을 받으면 be동사 + 과거분사를 쓴다. 행위자는 by 뒤에 쓴다.&quot;,cards:[c(&quot; &quot;,&quot;그 물건은 한 학생에 의해 발명되었다.&quot;,&quot;The thing was invented by a student.&quot;,&quot;The thing / was invented / by a student&quot;,&quot;was invented가 수동태이다.&quot;),c(&quot; &quot;,&quot;충전기는 발명품 박람회에서 소개되었다.&quot;,&quot;The charger was shown at the invention fair.&quot;,&quot;The charger / was shown / at the invention fair&quot;,&quot;was shown은 '소개되었다'이다.&quot;),c(&quot; &quot;,&quot;뜨거운 음식은 식혀졌다.&quot;,&quot;The hot food was cooled down.&quot;,&quot;The hot food / was cooled down&quot;,&quot;cool down의 수동태이다.&quot;),c(&quot; ️&quot;,&quot;그 안경은 시각 장애인을 위해 만들어졌다.&quot;,&quot;The glasses were made for blind people.&quot;,&quot;The glasses / were made / for blind people&quot;,&quot;were made for는 '~을 위해 만들어졌다'이다.&quot;)],tests:[]},
  infinitive:{name:&quot;어법 2. to부정사의 목적&quot;,rule:&quot;to + 동사원형은 '~하기 위해'라는 목적을 나타낼 수 있다.&quot;,cards:[c(&quot; &quot;,&quot;그는 배터리를 충전하기 위해 그것을 만들었다.&quot;,&quot;He made it to charge the battery.&quot;,&quot;He made it / to charge the battery&quot;,&quot;to charge는 목적이다.&quot;),c(&quot; &quot;,&quot;그 막대는 방향을 찾기 위해 사용된다.&quot;,&quot;The stick is used to find directions.&quot;,&quot;The stick is used / to find directions&quot;,&quot;to find directions는 목적이다.&quot;),c(&quot; &quot;,&quot;우리는 파티를 열기 위해 체육관에 갔다.&quot;,&quot;We went to the gym to throw a party.&quot;,&quot;We went to the gym / to throw a party&quot;,&quot;to throw a party는 목적이다.&quot;),c(&quot; &quot;,&quot;그 발명가는 기억을 돕기 위해 그것을 만들었다.&quot;,&quot;The inventor made it to help memory.&quot;,&quot;The inventor made it / to help memory&quot;,&quot;to help는 목적이다.&quot;)],tests:[]},
  dialogue:{kind:&quot;dialogue&quot;,name:&quot;대화. 발명품 설명하기&quot;,rule:&quot;발명품 묻기, 쓰임 말하기, 칭찬하기 표현을 익힌다.&quot;,cards:[d(&quot;A&quot;,&quot;What did you invent for the fair?&quot;,&quot;너는 박람회를 위해 무엇을 발명했니?&quot;,&quot;발명품을 묻는 표현이다.&quot;,&quot;B: I invented a special charger.&quot;),d(&quot;B&quot;,&quot;I invented a special charger.&quot;,&quot;나는 특별한 충전기를 발명했어.&quot;,&quot;발명한 물건을 말한다.&quot;,&quot;A: What is it used for?&quot;),d(&quot;A&quot;,&quot;What is it used for?&quot;,&quot;그것은 무엇에 사용되니?&quot;,&quot;용도를 묻는 표현이다.&quot;,&quot;B: It is used to charge a phone during a bike ride.&quot;),d(&quot;B&quot;,&quot;It is used to charge a phone during a bike ride.&quot;,&quot;자전거를 타는 동안 휴대전화를 충전하는 데 사용돼.&quot;,&quot;be used to V로 용도를 말한다.&quot;,&quot;A: That's creative and useful.&quot;),d(&quot;A&quot;,&quot;That's creative and useful.&quot;,&quot;그것은 창의적이고 유용하다.&quot;,&quot;칭찬 표현이다.&quot;,&quot;B: Thanks. I made it because my battery often runs out.&quot;),d(&quot;B&quot;,&quot;I made it because my battery often runs out.&quot;,&quot;배터리가 자주 다 닳아서 그것을 만들었어.&quot;,&quot;because로 이유를 말한다.&quot;,&quot;A: I want to try it out.&quot;)],tests:[]}
 }},
 &quot;4&quot;:{name:&quot;4과 도전과 꿈&quot;,grammars:{
  whenuntil:{name:&quot;어법 1. when/until 부사절&quot;,rule:&quot;when은 '~할 때', until은 '~할 때까지'를 나타내며 뒤에는 주어+동사가 온다.&quot;,cards:[c(&quot; &quot;,&quot;나는 마라톤을 끝냈을 때 기분이 좋았다.&quot;,&quot;I felt great when I finished the marathon.&quot;,&quot;I felt great / when I finished the marathon&quot;,&quot;when은 '~할 때'이다.&quot;),c(&quot; &quot;,&quot;우리는 얼음이 녹을 때까지 기다렸다.&quot;,&quot;We waited until the ice melted.&quot;,&quot;We waited / until the ice melted&quot;,&quot;until은 '~할 때까지'이다.&quot;),c(&quot; &quot;,&quot;그 등반가는 남극에 도착했을 때 울었다.&quot;,&quot;The climber cried when she reached the South Pole.&quot;,&quot;The climber cried / when she reached the South Pole&quot;,&quot;when절이 시간을 나타낸다.&quot;),c(&quot; ️&quot;,&quot;그들은 폭풍이 지나갈 때까지 움직이지 않았다.&quot;,&quot;They did not move until the storm passed.&quot;,&quot;They did not move / until the storm passed&quot;,&quot;until절이 끝나는 시점을 나타낸다.&quot;)],tests:[]},
  perfect:{name:&quot;어법 2. 현재완료 경험&quot;,rule:&quot;have/has + 과거분사는 경험이나 계속된 상태를 나타낼 수 있다.&quot;,cards:[c(&quot; &quot;,&quot;나는 그 유명한 등반가에 대해 들어 본 적이 있다.&quot;,&quot;I have heard of the famous climber.&quot;,&quot;I have heard of / the famous climber&quot;,&quot;have heard of는 경험을 나타낸다.&quot;),c(&quot; &quot;,&quot;그는 대회에서 실수한 적이 있다.&quot;,&quot;He has made mistakes in contests.&quot;,&quot;He has made / mistakes in contests&quot;,&quot;has made는 현재완료이다.&quot;),c(&quot; &quot;,&quot;그녀는 장기 자랑을 위해 많이 연습해 왔다.&quot;,&quot;She has practiced a lot for the talent show.&quot;,&quot;She has practiced / a lot / for the talent show&quot;,&quot;has practiced는 계속된 노력을 나타낸다.&quot;),c(&quot; &quot;,&quot;그들은 언젠가 남극에 가고 싶어 해 왔다.&quot;,&quot;They have wanted to go to Antarctica someday.&quot;,&quot;They have wanted / to go to Antarctica someday&quot;,&quot;have wanted는 현재까지 이어진 바람이다.&quot;)],tests:[]},
  dialogue:{kind:&quot;dialogue&quot;,name:&quot;대화. 격려와 도전 말하기&quot;,rule:&quot;걱정 말하기, 격려하기, 목표 말하기 표현을 익힌다.&quot;,cards:[d(&quot;A&quot;,&quot;I feel down about the contest.&quot;,&quot;대회 때문에 기분이 안 좋아.&quot;,&quot;걱정과 낙담을 말한다.&quot;,&quot;B: Don't worry. Just do your best.&quot;),d(&quot;B&quot;,&quot;Don't worry. Just do your best.&quot;,&quot;걱정하지 마. 최선을 다하면 돼.&quot;,&quot;격려 표현이다.&quot;,&quot;A: What if I make a mistake?&quot;),d(&quot;A&quot;,&quot;What if I make a mistake?&quot;,&quot;내가 실수하면 어떡하지?&quot;,&quot;걱정을 묻는다.&quot;,&quot;B: Everyone makes mistakes. Practice makes you better.&quot;),d(&quot;B&quot;,&quot;Practice makes you better.&quot;,&quot;연습은 너를 더 잘하게 만들어.&quot;,&quot;make + 목적어 + 보어 구조이다.&quot;,&quot;A: Thanks. I will practice until the last minute.&quot;),d(&quot;A&quot;,&quot;Have you heard of the climber?&quot;,&quot;그 등반가에 대해 들어 본 적 있니?&quot;,&quot;현재완료 경험을 묻는다.&quot;,&quot;B: Yes. She reached the South Pole.&quot;),d(&quot;B&quot;,&quot;Yes. She reached the South Pole.&quot;,&quot;응. 그녀는 남극에 도달했어.&quot;,&quot;인물의 성취를 말한다.&quot;,&quot;A: That's amazing. I want to explore someday.&quot;)],tests:[]}
 }}
};
DATA[&quot;1&quot;].grammars.ing.tests=fill30([gt(&quot; &quot;,&quot;나는 같은 음악을 듣는 것에 싫증이 났다.&quot;,&quot;I am tired of listening to the same music&quot;,&quot;of 뒤에는 listening을 쓴다.&quot;),gt(&quot; &quot;,&quot;나는 동아리에 가입하는 것에 대해 생각하고 있다.&quot;,&quot;I am thinking about signing up for the club&quot;,&quot;about 뒤에는 signing을 쓴다.&quot;),gt(&quot; &quot;,&quot;가방을 사기 전에 무게를 확인해라.&quot;,&quot;Check the weight before buying a backpack&quot;,&quot;before 뒤에는 buying을 쓴다.&quot;),gt(&quot; &quot;,&quot;나는 쿠키를 굽는 것을 좋아한다.&quot;,&quot;I like baking cookies&quot;,&quot;like 뒤에는 동명사를 쓸 수 있다.&quot;),gt(&quot; &quot;,&quot;그는 음악을 듣는 것을 즐긴다.&quot;,&quot;He enjoys listening to music&quot;,&quot;enjoy 뒤에는 동명사를 쓴다.&quot;),gt(&quot; ️&quot;,&quot;그녀는 온라인으로 쇼핑하는 것에 대해 말했다.&quot;,&quot;She talked about shopping online&quot;,&quot;about 뒤에는 shopping을 쓴다.&quot;),gt(&quot; &quot;,&quot;그는 농구를 하는 것에 싫증이 났다.&quot;,&quot;He is tired of playing basketball&quot;,&quot;of 뒤에는 playing을 쓴다.&quot;),gt(&quot; &quot;,&quot;상자를 열기 전에 조심해라.&quot;,&quot;Be careful before opening the box&quot;,&quot;before 뒤에는 opening을 쓴다.&quot;),gt(&quot; &quot;,&quot;나는 헤드폰을 가져오는 것을 잊었다.&quot;,&quot;I forgot bringing my headphones&quot;,&quot;동명사 목적어 배열을 연습한다.&quot;),gt(&quot; &quot;,&quot;그는 레몬 맛을 고르는 것에 대해 생각했다.&quot;,&quot;He thought about choosing lemon flavor&quot;,&quot;about 뒤에는 choosing을 쓴다.&quot;)]);
DATA[&quot;1&quot;].grammars.look.tests=fill30([gt(&quot; &quot;,&quot;그 가방은 가벼워 보인다.&quot;,&quot;The backpack looks light&quot;,&quot;look 뒤에는 형용사 light를 쓴다.&quot;),gt(&quot; &quot;,&quot;그 열쇠고리는 너에게 잘 어울린다.&quot;,&quot;The key ring looks good on you&quot;,&quot;look good on은 '~에게 잘 어울리다'이다.&quot;),gt(&quot; &quot;,&quot;그 딸기 맛은 달콤한 맛이 난다.&quot;,&quot;The strawberry flavor tastes sweet&quot;,&quot;taste 뒤에는 형용사 sweet를 쓴다.&quot;),gt(&quot; &quot;,&quot;그 음악은 놀랍게 들린다.&quot;,&quot;The music sounds amazing&quot;,&quot;sound 뒤에는 형용사를 쓴다.&quot;),gt(&quot; &quot;,&quot;그 파우치는 편안해 보인다.&quot;,&quot;The pouch looks comfortable&quot;,&quot;look + 형용사 구조이다.&quot;),gt(&quot; &quot;,&quot;그 레몬 맛은 신선한 맛이 난다.&quot;,&quot;The lemon flavor tastes fresh&quot;,&quot;taste + 형용사 구조이다.&quot;),gt(&quot; &quot;,&quot;그 드럼 연주는 멋지게 들린다.&quot;,&quot;The drumming sounds great&quot;,&quot;sound + 형용사 구조이다.&quot;),gt(&quot; &quot;,&quot;그 색은 너에게 잘 어울린다.&quot;,&quot;The color looks good on you&quot;,&quot;look good on 표현이다.&quot;),gt(&quot; &quot;,&quot;그 백팩은 무거워 보이지 않는다.&quot;,&quot;The backpack does not look heavy&quot;,&quot;look + 형용사 heavy 구조이다.&quot;),gt(&quot; &quot;,&quot;그 쿠키는 맛있어 보인다.&quot;,&quot;The cookie looks tasty&quot;,&quot;look + 형용사 tasty 구조이다.&quot;)]);
DATA[&quot;2&quot;].grammars.advice.tests=fill30([gt(&quot; &quot;,&quot;너는 약을 먹어야 한다.&quot;,&quot;You should take some medicine&quot;,&quot;should 뒤에는 동사원형을 쓴다.&quot;),gt(&quot; &quot;,&quot;너는 치과에 가는 것이 좋겠다.&quot;,&quot;You had better see a dentist&quot;,&quot;had better 뒤에는 동사원형을 쓴다.&quot;),gt(&quot; &quot;,&quot;너는 휴대전화를 내려놓아야 한다.&quot;,&quot;You should put your phone down&quot;,&quot;put down은 내려놓다이다.&quot;),gt(&quot; &quot;,&quot;너는 플래너를 사용해야 한다.&quot;,&quot;You should use a planner&quot;,&quot;should는 조언이다.&quot;),gt(&quot; &quot;,&quot;너는 줄넘기 전에 연습해야 한다.&quot;,&quot;You should practice before jumping rope&quot;,&quot;should + 동사원형 구조이다.&quot;),gt(&quot; &quot;,&quot;너는 걱정하지 않는 것이 좋겠다.&quot;,&quot;You had better not worry&quot;,&quot;had better not은 '~하지 않는 것이 좋다'이다.&quot;),gt(&quot; &quot;,&quot;너는 이를 닦아야 한다.&quot;,&quot;You should brush your teeth&quot;,&quot;brush one's teeth는 이를 닦다이다.&quot;),gt(&quot; &quot;,&quot;너는 용돈을 다 써버리지 않는 것이 좋겠다.&quot;,&quot;You had better not use up your pocket money&quot;,&quot;had better not + 동사원형 구조이다.&quot;),gt(&quot; &quot;,&quot;너는 반려동물을 돌봐야 한다.&quot;,&quot;You should take care of the pet&quot;,&quot;take care of는 돌보다이다.&quot;),gt(&quot; &quot;,&quot;너는 천천히 숨을 쉬어야 한다.&quot;,&quot;You should breathe slowly&quot;,&quot;should + 동사원형 구조이다.&quot;)]);
DATA[&quot;2&quot;].grammars.ask.tests=fill30([gt(&quot; &quot;,&quot;나는 친구에게 즉시 전화해 달라고 부탁했다.&quot;,&quot;I asked my friend to call right away&quot;,&quot;ask + 사람 + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;선생님은 우리에게 반려동물을 돌보라고 말씀하셨다.&quot;,&quot;The teacher told us to take care of the pet&quot;,&quot;tell + 사람 + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;그는 나에게 천천히 숨을 쉬라고 말했다.&quot;,&quot;He told me to breathe slowly&quot;,&quot;to breathe가 목적격 보어이다.&quot;),gt(&quot; &quot;,&quot;나는 동생에게 우리 문을 확인하라고 부탁했다.&quot;,&quot;I asked my brother to check the cage&quot;,&quot;ask + 목적어 + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;엄마는 나에게 휴대전화를 내려놓으라고 말씀하셨다.&quot;,&quot;Mom told me to put my phone down&quot;,&quot;tell + 목적어 + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;선생님은 학생들에게 플래너를 사용하라고 말씀하셨다.&quot;,&quot;The teacher told students to use a planner&quot;,&quot;to use가 목적격 보어이다.&quot;),gt(&quot; &quot;,&quot;치과 의사는 나에게 이를 닦으라고 말했다.&quot;,&quot;The dentist told me to brush my teeth&quot;,&quot;tell + me + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;나는 그에게 개에게 먹이를 주라고 부탁했다.&quot;,&quot;I asked him to feed the dog&quot;,&quot;ask + him + to feed 구조이다.&quot;),gt(&quot; &quot;,&quot;그녀는 나에게 문을 열어 두라고 부탁했다.&quot;,&quot;She asked me to leave the door open&quot;,&quot;ask + 목적어 + to V 구조이다.&quot;),gt(&quot; &quot;,&quot;코치는 우리에게 계속 연습하라고 말했다.&quot;,&quot;The coach told us to keep practicing&quot;,&quot;tell + us + to V 구조이다.&quot;)]);
DATA[&quot;3&quot;].grammars.passive.tests=fill30([gt(&quot; &quot;,&quot;그 물건은 한 학생에 의해 발명되었다.&quot;,&quot;The thing was invented by a student&quot;,&quot;was invented가 수동태이다.&quot;),gt(&quot; &quot;,&quot;충전기는 발명품 박람회에서 소개되었다.&quot;,&quot;The charger was shown at the invention fair&quot;,&quot;was shown은 소개되었다이다.&quot;),gt(&quot; &quot;,&quot;뜨거운 음식은 식혀졌다.&quot;,&quot;The hot food was cooled down&quot;,&quot;cool down의 수동태이다.&quot;),gt(&quot; ️&quot;,&quot;그 안경은 시각 장애인을 위해 만들어졌다.&quot;,&quot;The glasses were made for blind people&quot;,&quot;were made for는 '~을 위해 만들어졌다'이다.&quot;),gt(&quot; &quot;,&quot;그 지우개는 둥글게 만들어졌다.&quot;,&quot;The eraser was made round&quot;,&quot;make의 수동태이다.&quot;),gt(&quot; ️&quot;,&quot;파티는 체육관에서 열렸다.&quot;,&quot;The party was held in the gym&quot;,&quot;was held는 열렸다이다.&quot;),gt(&quot; &quot;,&quot;그 이야기는 잡지에 실렸다.&quot;,&quot;The story was printed in the magazine&quot;,&quot;was printed는 인쇄되었다이다.&quot;),gt(&quot; &quot;,&quot;그 배터리는 충전되었다.&quot;,&quot;The battery was charged&quot;,&quot;was charged는 충전되었다이다.&quot;),gt(&quot; &quot;,&quot;그 방향은 막대로 표시되었다.&quot;,&quot;The direction was shown by the stick&quot;,&quot;was shown by는 '~에 의해 보여졌다'이다.&quot;),gt(&quot; &quot;,&quot;그 놀이기구는 학생들에 의해 만들어졌다.&quot;,&quot;The ride was made by students&quot;,&quot;was made by는 수동태이다.&quot;)]);
DATA[&quot;3&quot;].grammars.infinitive.tests=fill30([gt(&quot; &quot;,&quot;그는 배터리를 충전하기 위해 그것을 만들었다.&quot;,&quot;He made it to charge the battery&quot;,&quot;to charge는 목적이다.&quot;),gt(&quot; &quot;,&quot;그 막대는 방향을 찾기 위해 사용된다.&quot;,&quot;The stick is used to find directions&quot;,&quot;to find는 목적이다.&quot;),gt(&quot; &quot;,&quot;우리는 파티를 열기 위해 체육관에 갔다.&quot;,&quot;We went to the gym to throw a party&quot;,&quot;to throw는 목적이다.&quot;),gt(&quot; &quot;,&quot;그 발명가는 기억을 돕기 위해 그것을 만들었다.&quot;,&quot;The inventor made it to help memory&quot;,&quot;to help는 목적이다.&quot;),gt(&quot; &quot;,&quot;그들은 음식을 식히기 위해 기다렸다.&quot;,&quot;They waited to cool down the food&quot;,&quot;to cool down은 목적이다.&quot;),gt(&quot; &quot;,&quot;그는 문제를 해결하기 위해 발명했다.&quot;,&quot;He invented it to solve the problem&quot;,&quot;to solve는 목적이다.&quot;),gt(&quot; &quot;,&quot;그것은 시각 장애인을 돕기 위해 만들어졌다.&quot;,&quot;It was made to help blind people&quot;,&quot;to help는 목적이다.&quot;),gt(&quot; &quot;,&quot;나는 배터리가 다 닳지 않게 하려고 충전기를 가져왔다.&quot;,&quot;I brought a charger to save the battery&quot;,&quot;to save는 목적이다.&quot;),gt(&quot; &quot;,&quot;그들은 발명품을 보여 주기 위해 박람회에 갔다.&quot;,&quot;They went to the fair to show inventions&quot;,&quot;to show는 목적이다.&quot;),gt(&quot; &quot;,&quot;그는 체육관에서 연습하기 위해 갔다.&quot;,&quot;He went to the gym to practice&quot;,&quot;to practice는 목적이다.&quot;)]);
DATA[&quot;4&quot;].grammars.whenuntil.tests=fill30([gt(&quot; &quot;,&quot;나는 마라톤을 끝냈을 때 기분이 좋았다.&quot;,&quot;I felt great when I finished the marathon&quot;,&quot;when은 '~할 때'이다.&quot;),gt(&quot; &quot;,&quot;우리는 얼음이 녹을 때까지 기다렸다.&quot;,&quot;We waited until the ice melted&quot;,&quot;until은 '~할 때까지'이다.&quot;),gt(&quot; &quot;,&quot;그 등반가는 남극에 도착했을 때 울었다.&quot;,&quot;The climber cried when she reached the South Pole&quot;,&quot;when절이 시간을 나타낸다.&quot;),gt(&quot; ️&quot;,&quot;그들은 폭풍이 지나갈 때까지 움직이지 않았다.&quot;,&quot;They did not move until the storm passed&quot;,&quot;until절이 끝나는 시점을 나타낸다.&quot;),gt(&quot; &quot;,&quot;나는 그 기사를 읽었을 때 놀랐다.&quot;,&quot;I was amazed when I read the article&quot;,&quot;when은 시간 부사절이다.&quot;),gt(&quot; &quot;,&quot;그녀는 땅에 착륙할 때까지 포기하지 않았다.&quot;,&quot;She did not give up until she landed&quot;,&quot;until은 계속된 상태의 끝을 나타낸다.&quot;),gt(&quot; &quot;,&quot;대회가 끝났을 때 그는 완벽하지 않아도 웃었다.&quot;,&quot;He smiled when the contest ended&quot;,&quot;when은 사건의 시점을 나타낸다.&quot;),gt(&quot; &quot;,&quot;우리는 얼음이 두꺼워질 때까지 기다렸다.&quot;,&quot;We waited until the ice got thick&quot;,&quot;until 뒤에는 주어+동사가 온다.&quot;),gt(&quot; &quot;,&quot;그는 언젠가 남극에 도달할 때까지 노력할 것이다.&quot;,&quot;He will try until he reaches Antarctica&quot;,&quot;until절에서는 현재형으로 미래를 나타낼 수 있다.&quot;),gt(&quot; &quot;,&quot;그는 실수했을 때 다시 연습했다.&quot;,&quot;He practiced again when he made a mistake&quot;,&quot;when은 '~했을 때'이다.&quot;)]);
DATA[&quot;4&quot;].grammars.perfect.tests=fill30([gt(&quot; &quot;,&quot;나는 그 유명한 등반가에 대해 들어 본 적이 있다.&quot;,&quot;I have heard of the famous climber&quot;,&quot;have heard of는 경험이다.&quot;),gt(&quot; &quot;,&quot;그는 대회에서 실수한 적이 있다.&quot;,&quot;He has made mistakes in contests&quot;,&quot;has made는 현재완료이다.&quot;),gt(&quot; &quot;,&quot;그녀는 장기 자랑을 위해 많이 연습해 왔다.&quot;,&quot;She has practiced a lot for the talent show&quot;,&quot;has practiced는 계속된 노력을 나타낸다.&quot;),gt(&quot; &quot;,&quot;그들은 언젠가 남극에 가고 싶어 해 왔다.&quot;,&quot;They have wanted to go to Antarctica someday&quot;,&quot;have wanted는 현재완료이다.&quot;),gt(&quot; &quot;,&quot;나는 마라톤을 끝낸 적이 있다.&quot;,&quot;I have finished a marathon&quot;,&quot;have finished는 경험을 나타낸다.&quot;),gt(&quot; &quot;,&quot;그 탐험가는 두꺼운 얼음을 본 적이 있다.&quot;,&quot;The explorer has seen thick ice&quot;,&quot;has seen은 경험이다.&quot;),gt(&quot; &quot;,&quot;너는 그 잡지에 대해 들어 본 적이 있니?&quot;,&quot;Have you heard of the magazine&quot;,&quot;Have you p.p.?는 경험 질문이다.&quot;),gt(&quot; &quot;,&quot;그녀는 남극에 도착한 적이 있다.&quot;,&quot;She has reached the South Pole&quot;,&quot;has reached는 경험이다.&quot;),gt(&quot; &quot;,&quot;그는 대회를 위해 최선을 다해 왔다.&quot;,&quot;He has done his best for the contest&quot;,&quot;has done은 현재완료이다.&quot;),gt(&quot; &quot;,&quot;나는 같은 실수를 여러 번 해 왔다.&quot;,&quot;I have made the same mistake many times&quot;,&quot;have made는 반복된 경험이다.&quot;)]);
DATA[&quot;1&quot;].grammars.dialogue.tests=dialogueTests(DATA[&quot;1&quot;].grammars.dialogue.cards,[dq(&quot;function&quot;,&quot;What kind of ~? 의 기능은?&quot;,&quot;종류나 취향을 묻는다.&quot;,[&quot;종류나 취향을 묻는다.&quot;,&quot;아픈 곳을 묻는다.&quot;,&quot;발명품의 용도를 묻는다.&quot;,&quot;도전을 격려한다.&quot;],&quot;kind는 종류이다.&quot;,&quot;A&quot;),dq(&quot;function&quot;,&quot;It looks good on you. 의 기능은?&quot;,&quot;상대에게 잘 어울린다고 칭찬한다.&quot;,[&quot;상대에게 잘 어울린다고 칭찬한다.&quot;,&quot;상대에게 쉬라고 조언한다.&quot;,&quot;상대에게 전화하라고 부탁한다.&quot;,&quot;상대에게 포기하지 말라고 한다.&quot;],&quot;look good on은 칭찬 표현이다.&quot;,&quot;A&quot;),dq(&quot;meaning&quot;,&quot;I will choose this one. 의 뜻은?&quot;,&quot;나는 이것을 고를게.&quot;,[&quot;나는 이것을 고를게.&quot;,&quot;나는 아파.&quot;,&quot;나는 충전기를 만들었어.&quot;,&quot;나는 남극에 갈 거야.&quot;],&quot;choose는 고르다이다.&quot;,&quot;B&quot;)]);
DATA[&quot;2&quot;].grammars.dialogue.tests=dialogueTests(DATA[&quot;2&quot;].grammars.dialogue.cards,[dq(&quot;function&quot;,&quot;What's wrong? 의 기능은?&quot;,&quot;상대의 상태나 문제를 묻는다.&quot;,[&quot;상대의 상태나 문제를 묻는다.&quot;,&quot;취향을 묻는다.&quot;,&quot;발명품을 칭찬한다.&quot;,&quot;경험을 묻는다.&quot;],&quot;상태 확인 표현이다.&quot;,&quot;A&quot;),dq(&quot;function&quot;,&quot;You should ~ 의 기능은?&quot;,&quot;상대에게 조언한다.&quot;,[&quot;상대에게 조언한다.&quot;,&quot;상대에게 취향을 묻는다.&quot;,&quot;대회를 설명한다.&quot;,&quot;시간을 말한다.&quot;],&quot;should는 조언이다.&quot;,&quot;A&quot;),dq(&quot;meaning&quot;,&quot;right away 의 뜻은?&quot;,&quot;즉시, 곧바로&quot;,[&quot;즉시, 곧바로&quot;,&quot;천천히&quot;,&quot;언젠가&quot;,&quot;동시에&quot;],&quot;right away는 즉시이다.&quot;,&quot;A&quot;)]);
DATA[&quot;3&quot;].grammars.dialogue.tests=dialogueTests(DATA[&quot;3&quot;].grammars.dialogue.cards,[dq(&quot;function&quot;,&quot;What is it used for? 의 기능은?&quot;,&quot;물건의 용도를 묻는다.&quot;,[&quot;물건의 용도를 묻는다.&quot;,&quot;증상을 묻는다.&quot;,&quot;취향을 묻는다.&quot;,&quot;격려한다.&quot;],&quot;be used for는 용도 표현이다.&quot;,&quot;A&quot;),dq(&quot;function&quot;,&quot;That's creative and useful. 의 기능은?&quot;,&quot;발명품을 칭찬한다.&quot;,[&quot;발명품을 칭찬한다.&quot;,&quot;아픈 증상을 말한다.&quot;,&quot;대회를 걱정한다.&quot;,&quot;예산을 확인한다.&quot;],&quot;creative and useful은 긍정 평가이다.&quot;,&quot;A&quot;),dq(&quot;meaning&quot;,&quot;I want to try it out. 의 뜻은?&quot;,&quot;나는 그것을 시도해 보고 싶어.&quot;,[&quot;나는 그것을 시도해 보고 싶어.&quot;,&quot;나는 그것을 버리고 싶어.&quot;,&quot;나는 이를 닦아야 해.&quot;,&quot;나는 남극에 도달했어.&quot;],&quot;try out은 시도해 보다이다.&quot;,&quot;A&quot;)]);
DATA[&quot;4&quot;].grammars.dialogue.tests=dialogueTests(DATA[&quot;4&quot;].grammars.dialogue.cards,[dq(&quot;function&quot;,&quot;Don't worry. 의 기능은?&quot;,&quot;상대를 안심시키고 격려한다.&quot;,[&quot;상대를 안심시키고 격려한다.&quot;,&quot;상대의 물건을 칭찬한다.&quot;,&quot;증상을 묻는다.&quot;,&quot;발명품의 용도를 묻는다.&quot;],&quot;걱정을 덜어 주는 표현이다.&quot;,&quot;B&quot;),dq(&quot;function&quot;,&quot;What if ~? 의 기능은?&quot;,&quot;걱정되는 상황을 가정해 묻는다.&quot;,[&quot;걱정되는 상황을 가정해 묻는다.&quot;,&quot;좋아하는 것을 묻는다.&quot;,&quot;용도를 설명한다.&quot;,&quot;현재완료 경험을 말한다.&quot;],&quot;What if는 '~하면 어떡하지?'이다.&quot;,&quot;A&quot;),dq(&quot;meaning&quot;,&quot;I want to explore someday. 의 뜻은?&quot;,&quot;나는 언젠가 탐험하고 싶어.&quot;,[&quot;나는 언젠가 탐험하고 싶어.&quot;,&quot;나는 지금 아파.&quot;,&quot;나는 파우치를 고를게.&quot;,&quot;나는 충전기를 만들었어.&quot;],&quot;someday는 언젠가이다.&quot;,&quot;A&quot;)]);
const state={lesson:&quot;1&quot;,grammar:&quot;ing&quot;,mode:&quot;study&quot;,cards:[],card:0,open:false,questions:[],index:0,score:0,wrong:[],picked:[],used:[],locked:false};
const $=s=&gt;document.querySelector(s),screen=$(&quot;#screen&quot;),lessonSelect=$(&quot;#lessonSelect&quot;),grammarSelect=$(&quot;#grammarSelect&quot;),studyTab=$(&quot;#studyTab&quot;),testTab=$(&quot;#testTab&quot;),bestEl=$(&quot;#best&quot;);
const esc=v=&gt;String(v).replace(/[&amp;&lt;&gt;&quot;']/g,c=&gt;({&quot;&amp;&quot;:&quot;&amp;amp;&quot;,&quot;&lt;&quot;:&quot;&amp;lt;&quot;,&quot;&gt;&quot;:&quot;&amp;gt;&quot;,'&quot;':&quot;&amp;quot;&quot;,&quot;'&quot;:&quot;&amp;#039;&quot;}[c]));const shuffle=mix;
function curLesson(){return DATA[state.lesson]}function curGrammar(){return curLesson().grammars[state.grammar]}function key(){return`visang-hwang-grammar-${state.lesson}-${state.grammar}`}
function fillControls(){lessonSelect.innerHTML=Object.keys(DATA).map(k=&gt;`&lt;option value=&quot;${k}&quot; ${k===state.lesson?&quot;selected&quot;:&quot;&quot;}&gt;${DATA[k].name}&lt;/option&gt;`).join(&quot;&quot;);grammarSelect.innerHTML=Object.keys(curLesson().grammars).map(k=&gt;`&lt;option value=&quot;${k}&quot; ${k===state.grammar?&quot;selected&quot;:&quot;&quot;}&gt;${curLesson().grammars[k].name}&lt;/option&gt;`).join(&quot;&quot;)}
function setMode(mode){state.mode=mode;studyTab.classList.toggle(&quot;active&quot;,mode===&quot;study&quot;);testTab.classList.toggle(&quot;active&quot;,mode===&quot;test&quot;);mode===&quot;study&quot;?renderStudy():startTest()}function resetCards(){state.cards=shuffle(curGrammar().cards);state.card=0;state.open=false}
function rules(){const g=curGrammar();return`&lt;div class=&quot;rules&quot;&gt;&lt;div&gt;&lt;strong&gt;${state.lesson}과&lt;/strong&gt;&lt;span&gt;과 선택&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${g.kind===&quot;dialogue&quot;?&quot;대화&quot;:&quot;어법&quot;}&lt;/strong&gt;&lt;span&gt;학습 유형&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;span&gt;시험 문항&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;`}
function best(){return Number(localStorage.getItem(key())||0)}function updateBest(){bestEl.textContent=`최고 ${best()}점`}
function renderStudy(){fillControls();updateBest();if(!state.cards.length)resetCards();const g=curGrammar(),card=state.cards[state.card];if(g.kind===&quot;dialogue&quot;){screen.innerHTML=rules()+`&lt;article class=&quot;study-card ${state.open?&quot;open&quot;:&quot;&quot;}&quot; id=&quot;card&quot;&gt;&lt;div class=&quot;scene&quot;&gt;&lt;div&gt;&lt;div class=&quot;pic&quot;&gt; &lt;/div&gt;&lt;b&gt;${esc(g.name)}&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card-body&quot;&gt;&lt;div class=&quot;dialogue-meta&quot;&gt;&lt;span class=&quot;speaker&quot;&gt;${esc(card.speaker)}&lt;/span&gt;&lt;span&gt;${esc(g.rule)}&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;sentence&quot;&gt;${esc(card.en)}&lt;/div&gt;&lt;div class=&quot;answer&quot;&gt;&lt;b&gt;우리말&lt;/b&gt;&lt;br&gt;${esc(card.ko)}&lt;br&gt;&lt;br&gt;&lt;b&gt;대화 흐름&lt;/b&gt;&lt;br&gt;${esc(card.note)}&lt;div class=&quot;next-line&quot;&gt;&lt;b&gt;이어지는 말&lt;/b&gt;&lt;br&gt;${esc(card.next)}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;div class=&quot;count&quot;&gt;${state.card+1} / ${state.cards.length}&lt;/div&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;prev&quot;&gt;이전&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;flip&quot;&gt;풀이&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;next&quot;&gt;다음&lt;/button&gt;&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;goTest&quot; style=&quot;width:100%;margin-top:7px&quot;&gt;대화 4지선다 시험&lt;/button&gt;`}else{screen.innerHTML=rules()+`&lt;article class=&quot;study-card ${state.open?&quot;open&quot;:&quot;&quot;}&quot; id=&quot;card&quot;&gt;&lt;div class=&quot;scene&quot;&gt;&lt;div&gt;&lt;div class=&quot;pic&quot;&gt;${card.pic}&lt;/div&gt;&lt;b&gt;${esc(g.name)}&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;card-body&quot;&gt;&lt;span class=&quot;badge&quot;&gt;${esc(g.rule)}&lt;/span&gt;&lt;div class=&quot;sentence&quot;&gt;${esc(card.en)}&lt;/div&gt;&lt;div class=&quot;ko&quot;&gt;${esc(card.ko)}&lt;/div&gt;&lt;div class=&quot;answer&quot;&gt;&lt;b&gt;암기 단위&lt;/b&gt;&lt;br&gt;${esc(card.chunks)}&lt;br&gt;&lt;br&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;br&gt;${esc(card.note)}&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;&lt;div class=&quot;count&quot;&gt;${state.card+1} / ${state.cards.length}&lt;/div&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;prev&quot;&gt;이전&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;flip&quot;&gt;풀이&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;next&quot;&gt;다음&lt;/button&gt;&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;goTest&quot; style=&quot;width:100%;margin-top:7px&quot;&gt;선택 영작 시험&lt;/button&gt;`}$(&quot;#card&quot;).onclick=flip;$(&quot;#flip&quot;).onclick=flip;$(&quot;#prev&quot;).onclick=()=&gt;{state.card=(state.card-1+state.cards.length)%state.cards.length;state.open=false;renderStudy()};$(&quot;#next&quot;).onclick=()=&gt;{state.card=(state.card+1)%state.cards.length;state.open=false;renderStudy()};$(&quot;#goTest&quot;).onclick=()=&gt;setMode(&quot;test&quot;)}
function flip(){state.open=!state.open;$(&quot;#card&quot;)?.classList.toggle(&quot;open&quot;,state.open)}
function startTest(){fillControls();updateBest();state.questions=shuffle(curGrammar().tests);state.index=0;state.score=0;state.wrong=[];renderQuestion()}
function renderQuestion(){if(state.index&gt;=state.questions.length)return renderResult();state.locked=false;state.picked=[];state.used=[];const q=state.questions[state.index];if(q.kind===&quot;dialogue&quot;){q.shuffled=shuffle(q.choices);screen.innerHTML=rules()+`&lt;div class=&quot;quiz-head&quot;&gt;&lt;div&gt;&lt;h2&gt;${esc(curGrammar().name)}&lt;/h2&gt;&lt;small&gt;${state.index+1} / ${state.questions.length} · ${state.score}개 정답&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bar&quot;&gt;&lt;i style=&quot;width:${(state.index+1)/state.questions.length*100}%&quot;&gt;&lt;/i&gt;&lt;/div&gt;&lt;section class=&quot;question&quot;&gt;&lt;div class=&quot;qscene&quot;&gt;&lt;div class=&quot;pic&quot;&gt; &lt;/div&gt;&lt;div&gt;&lt;div class=&quot;prompt&quot;&gt;${esc(q.prompt)}&lt;/div&gt;&lt;div class=&quot;hint&quot;&gt;${q.type===&quot;meaning&quot;?&quot;문장의 의미를 고르세요&quot;:&quot;이어지는 대화를 고르세요&quot;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;${q.shuffled.map((choice,i)=&gt;`&lt;button class=&quot;choice4&quot; data-choice=&quot;${esc(choice)}&quot;&gt;&lt;b&gt;${i+1}&lt;/b&gt;&lt;span&gt;${esc(choice)}&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;div id=&quot;feedback&quot;&gt;&lt;/div&gt;&lt;/section&gt;`;document.querySelectorAll(&quot;.choice4&quot;).forEach(btn=&gt;btn.onclick=()=&gt;checkChoice(btn.dataset.choice));return}q.shuffled=shuffle(q.tiles.map((text,i)=&gt;({text,i})));screen.innerHTML=rules()+`&lt;div class=&quot;quiz-head&quot;&gt;&lt;div&gt;&lt;h2&gt;${esc(curGrammar().name)}&lt;/h2&gt;&lt;small&gt;${state.index+1} / ${state.questions.length} · ${state.score}개 정답&lt;/small&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bar&quot;&gt;&lt;i style=&quot;width:${(state.index+1)/state.questions.length*100}%&quot;&gt;&lt;/i&gt;&lt;/div&gt;&lt;section class=&quot;question&quot;&gt;&lt;div class=&quot;qscene&quot;&gt;&lt;div class=&quot;pic&quot;&gt;${q.pic}&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;prompt&quot;&gt;${esc(q.ko)}&lt;/div&gt;&lt;div class=&quot;hint&quot;&gt;${esc(curGrammar().rule)}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;target empty&quot; id=&quot;target&quot;&gt;단어 카드를 순서대로 누르세요&lt;/div&gt;&lt;div class=&quot;tiles&quot;&gt;${q.shuffled.map((tile,idx)=&gt;`&lt;button class=&quot;tile&quot; data-idx=&quot;${idx}&quot;&gt;${esc(tile.text)}&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;undo&quot;&gt;되돌리기&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;clear&quot;&gt;초기화&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;check&quot;&gt;확인&lt;/button&gt;&lt;/div&gt;&lt;div id=&quot;feedback&quot;&gt;&lt;/div&gt;&lt;/section&gt;`;document.querySelectorAll(&quot;.tile&quot;).forEach(btn=&gt;btn.onclick=()=&gt;pickTile(Number(btn.dataset.idx)));$(&quot;#undo&quot;).onclick=undo;$(&quot;#clear&quot;).onclick=clearPicked;$(&quot;#check&quot;).onclick=checkAnswer}
function updateTarget(){const target=$(&quot;#target&quot;);if(!state.picked.length){target.textContent=&quot;단어 카드를 순서대로 누르세요&quot;;target.classList.add(&quot;empty&quot;)}else{target.textContent=state.picked.map(x=&gt;x.text).join(&quot; &quot;);target.classList.remove(&quot;empty&quot;)}document.querySelectorAll(&quot;.tile&quot;).forEach((b,i)=&gt;b.classList.toggle(&quot;used&quot;,state.used.includes(i)))}function pickTile(idx){if(state.locked||state.used.includes(idx))return;const q=state.questions[state.index];state.used.push(idx);state.picked.push(q.shuffled[idx]);updateTarget()}function undo(){if(state.locked)return;state.used.pop();state.picked.pop();updateTarget()}function clearPicked(){if(state.locked)return;state.used=[];state.picked=[];updateTarget()}
function checkAnswer(){if(state.locked)return;state.locked=true;const q=state.questions[state.index],built=state.picked.map(x=&gt;x.text).join(&quot; &quot;),ok=built===q.tiles.join(&quot; &quot;);if(ok)state.score++;else state.wrong.push({q,built});$(&quot;#feedback&quot;).innerHTML=`&lt;div class=&quot;feedback ${ok?&quot;ok&quot;:&quot;bad&quot;}&quot;&gt;&lt;strong&gt;${ok?&quot;정답입니다&quot;:&quot;오답입니다&quot;}&lt;/strong&gt;&lt;br&gt;정답: ${esc(q.en)}&lt;br&gt;${esc(q.note)}&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;width:100%;margin-top:8px&quot;&gt;${state.index===state.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;`;$(&quot;#nextQ&quot;).onclick=()=&gt;{state.index++;renderQuestion()}}
function checkChoice(selected){if(state.locked)return;state.locked=true;const q=state.questions[state.index],ok=selected===q.answer;if(ok)state.score++;else state.wrong.push({q,built:selected});document.querySelectorAll(&quot;.choice4&quot;).forEach(btn=&gt;{btn.disabled=true;const v=btn.dataset.choice;if(v===q.answer)btn.classList.add(&quot;correct&quot;);if(v===selected&amp;&amp;!ok)btn.classList.add(&quot;wrong&quot;)});$(&quot;#feedback&quot;).innerHTML=`&lt;div class=&quot;feedback ${ok?&quot;ok&quot;:&quot;bad&quot;}&quot;&gt;&lt;strong&gt;${ok?&quot;정답입니다&quot;:&quot;오답입니다&quot;}&lt;/strong&gt;&lt;br&gt;정답: ${esc(q.answer)}&lt;br&gt;${esc(q.note)}&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;width:100%;margin-top:8px&quot;&gt;${state.index===state.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;`;$(&quot;#nextQ&quot;).onclick=()=&gt;{state.index++;renderQuestion()}}
function renderResult(){const total=state.questions.length,score=Math.round(state.score/total*100);if(score&gt;best())localStorage.setItem(key(),score);updateBest();screen.innerHTML=`&lt;section class=&quot;result&quot;&gt;&lt;div class=&quot;score&quot;&gt;${score}점&lt;/div&gt;&lt;h2&gt;${state.score} / ${total}문제 정답&lt;/h2&gt;&lt;p&gt;${esc(curLesson().name)} · ${esc(curGrammar().name)}&lt;/p&gt;&lt;div class=&quot;nav&quot;&gt;&lt;button class=&quot;secondary&quot; id=&quot;home&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;primary&quot; id=&quot;retry&quot;&gt;다시 풀기&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;share&quot;&gt;전송&lt;/button&gt;&lt;/div&gt;&lt;div class=&quot;wrong-list&quot;&gt;&lt;h3&gt;오답 정리&lt;/h3&gt;${state.wrong.length?state.wrong.map(w=&gt;`&lt;div class=&quot;wrong&quot;&gt;&lt;b&gt;${esc(w.q.ko||w.q.prompt)}&lt;/b&gt;&lt;br&gt;내 답: ${esc(w.built||&quot;(미완성)&quot;)}&lt;br&gt;정답: ${esc(w.q.en||w.q.answer)}&lt;/div&gt;`).join(&quot;&quot;):`&lt;div class=&quot;wrong&quot;&gt;모든 문제를 맞혔습니다.&lt;/div&gt;`}&lt;/div&gt;&lt;/section&gt;`;$(&quot;#home&quot;).onclick=()=&gt;setMode(&quot;study&quot;);$(&quot;#retry&quot;).onclick=startTest;$(&quot;#share&quot;).onclick=shareResult}
function shareResult(){const text=`중2 비상(황) 어법·대화 결과\n${curLesson().name} · ${curGrammar().name}\n점수: ${state.score}/${state.questions.length} (${Math.round(state.score/state.questions.length*100)}점)`;if(navigator.share)navigator.share({title:&quot;중2 비상(황) 어법·대화 결과&quot;,text}).catch(()=&gt;{});else navigator.clipboard?.writeText(text).then(()=&gt;alert(&quot;결과가 복사되었습니다. 카카오톡 등에 붙여넣어 전송하세요.&quot;))}
lessonSelect.onchange=()=&gt;{state.lesson=lessonSelect.value;state.grammar=Object.keys(curLesson().grammars)[0];state.cards=[];state.mode===&quot;study&quot;?renderStudy():startTest()};grammarSelect.onchange=()=&gt;{state.grammar=grammarSelect.value;state.cards=[];state.mode===&quot;study&quot;?renderStudy():startTest()};studyTab.onclick=()=&gt;setMode(&quot;study&quot;);testTab.onclick=()=&gt;setMode(&quot;test&quot;);fillControls();resetCards();renderStudy();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>내신 중등/대광중</category>
      <category>비상(황)</category>
      <category>중2</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/392</guid>
      <comments>https://ymedu.tistory.com/392#entry392comment</comments>
      <pubDate>Tue, 30 Jun 2026 17:58:47 +0900</pubDate>
    </item>
    <item>
      <title>중등 역사2</title>
      <link>https://ymedu.tistory.com/391</link>
      <description>&lt;!doctype html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot;&gt;
&lt;meta name=&quot;theme-color&quot; content=&quot;#18332f&quot;&gt;
&lt;title&gt;YM 역사2 요점 정리&lt;/title&gt;
&lt;style&gt;
:root{--ink:#172522;--muted:#6c7773;--paper:#f5f1e8;--card:#fffdf8;--line:#ded8cb;--deep:#18332f;--accent:#d97757;--good:#2d7a59;--bad:#b84b48;--shadow:0 12px 35px rgba(32,46,42,.09)}
*{box-sizing:border-box}html{background:#eae5da}body{margin:0;color:var(--ink);font-family:&quot;Pretendard&quot;,&quot;Noto Sans KR&quot;,&quot;Malgun Gothic&quot;,system-ui,sans-serif;background:radial-gradient(circle at 90% 0%,rgba(217,119,87,.13),transparent 30rem),var(--paper)}button,select{font:inherit}button{cursor:pointer;-webkit-tap-highlight-color:transparent}.app{width:min(100%,720px);min-height:100svh;margin:auto;background:var(--paper)}.top{position:sticky;top:0;z-index:20;height:68px;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;background:rgba(245,241,232,.95);border-bottom:1px solid rgba(116,106,87,.13);backdrop-filter:blur(14px)}.brand{border:0;background:none;display:flex;gap:10px;align-items:center;text-align:left;color:var(--deep)}.mark{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:var(--deep);color:#fff;font-family:serif;font-size:21px}.brand b{display:block;font-size:17px}.brand small{display:block;color:var(--muted);font-size:11px}.icon{border:1px solid var(--line);background:var(--card);border-radius:12px;padding:9px 12px;color:var(--deep);font-weight:800}main{padding:20px 16px 100px}.eyebrow{color:var(--accent);font-size:12px;font-weight:900;letter-spacing:1.2px;text-transform:uppercase}h1{margin:8px 0 10px;font-family:Georgia,&quot;Noto Serif KR&quot;,serif;font-size:clamp(29px,8vw,45px);line-height:1.12;letter-spacing:-1px}h2{margin:0;font-size:22px}h3{margin:0;font-size:17px}p{line-height:1.62}.hero p,.muted{color:var(--muted)}.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0 26px}.summary div{background:var(--deep);color:white;border-radius:16px;padding:13px 8px;text-align:center}.summary strong{display:block;font-size:20px}.summary span{font-size:11px;opacity:.72}.section-title{display:flex;align-items:end;justify-content:space-between;margin:24px 0 12px}.section-title p{margin:0;color:var(--muted);font-size:12px}.grid{display:grid;gap:11px}.unit,.sub{width:100%;border:1px solid var(--line);background:var(--card);border-radius:18px;padding:16px;text-align:left;color:var(--ink);box-shadow:0 3px 0 rgba(42,48,44,.035)}.unit{position:relative;overflow:hidden}.unit:after{content:&quot;&quot;;position:absolute;width:96px;height:96px;border-radius:50%;right:-36px;top:-43px;background:var(--unit);opacity:.14}.num{display:inline-grid;place-items:center;width:29px;height:29px;border-radius:50%;color:white;background:var(--unit);font-weight:900;font-size:13px}.unit h3{margin:12px 0 5px;padding-right:20px}.unit p,.sub span{margin:0;color:var(--muted);font-size:13px}.actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.pill{border:0;border-radius:999px;background:#eeeae1;color:var(--deep);font-size:12px;font-weight:900;padding:9px 10px}.pill.primary{color:white;background:var(--unit)}.sub.selected{border-color:var(--unit);box-shadow:inset 4px 0 0 var(--unit)}.sub strong{display:block;margin-bottom:5px}.bottom{position:fixed;bottom:0;left:50%;transform:translateX(-50%);z-index:30;width:min(100%,720px);padding:8px 12px calc(8px + env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(4,1fr);background:rgba(255,253,248,.96);border-top:1px solid var(--line);backdrop-filter:blur(16px)}.bottom button{border:0;background:none;color:#8a918e;font-size:10px;font-weight:900;padding:5px}.bottom span{display:block;height:22px;font-size:18px}.bottom button.active{color:var(--deep)}.head{display:flex;gap:12px;align-items:flex-start;margin-bottom:18px}.back{width:40px;height:40px;border:1px solid var(--line);border-radius:13px;background:var(--card);font-size:20px}.seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;border-radius:15px;background:#e9e4da;margin-bottom:16px}.seg button{border:0;border-radius:11px;padding:10px;background:transparent;font-weight:900;color:var(--muted)}.seg button.active{background:var(--card);color:var(--deep);box-shadow:0 2px 8px rgba(0,0,0,.06)}.progress{height:6px;border-radius:999px;background:#e1ddd4;overflow:hidden;margin:12px 0 18px}.progress i{display:block;height:100%;width:var(--progress);background:var(--unit);border-radius:inherit}.cornell{display:grid;grid-template-columns:32% 68%;min-height:320px;border:1px solid #d9d1c3;border-radius:20px;overflow:hidden;background:#fffef9;box-shadow:var(--shadow)}.cue{padding:19px 13px;border-right:1px solid #d9d1c3;background:#f3eee3}.note{padding:19px}.label{display:block;color:var(--muted);font-size:10px;font-weight:900;letter-spacing:1px;margin-bottom:10px}.cue-time{font-family:Georgia,serif;font-weight:800;color:var(--unit);font-size:16px}.cue-place{margin-top:8px;font-size:12px;color:var(--muted)}.note h3{font-family:Georgia,&quot;Noto Serif KR&quot;,serif;font-size:25px;line-height:1.25;margin-top:3px}.hint{min-height:110px;margin:18px 0 14px;border-radius:15px;padding:15px;background:#f5f2eb;color:var(--muted);line-height:1.65}.hint.hidden{display:grid;place-items:center;border:1px dashed #c9c2b5;background:transparent;color:#949a96}.primary,.secondary{width:100%;border:0;border-radius:15px;padding:14px 16px;font-weight:900}.primary{background:var(--deep);color:white}.secondary{background:#ebe6dc;color:var(--deep)}.cardnav{display:grid;grid-template-columns:48px 1fr 48px;gap:8px;margin-top:13px}.cardnav button{border:1px solid var(--line);background:var(--card);border-radius:14px;min-height:47px;font-weight:900}.quiz-start{padding:24px;border-radius:22px;background:var(--deep);color:white;box-shadow:var(--shadow)}.quiz-start p{color:rgba(255,255,255,.72);margin:7px 0 18px}.rules{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0}.rules div{border-radius:14px;padding:12px 7px;background:rgba(255,255,255,.09);text-align:center}.rules strong{display:block;font-size:19px}.rules span{font-size:10px;opacity:.7}.quiz-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}.timer{width:49px;height:49px;display:grid;place-items:center;border-radius:50%;color:white;background:var(--deep);font-weight:900;font-size:17px;box-shadow:inset 0 0 0 5px rgba(255,255,255,.18)}.timer.danger{background:var(--bad)}.qcard{padding:21px;background:var(--card);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow)}.qcard .meta{color:var(--unit);font-size:12px;font-weight:900}.qcard h2{margin:11px 0 20px;line-height:1.45;font-size:21px}.choices{display:grid;gap:10px}.choice{display:flex;gap:12px;align-items:center;width:100%;padding:14px;border:1px solid var(--line);border-radius:15px;background:white;text-align:left;color:var(--ink)}.choice b{display:grid;place-items:center;flex:0 0 auto;width:27px;height:27px;border-radius:50%;background:#eeeae1;font-size:12px}.choice.correct{border-color:var(--good);color:var(--good);background:#edf7f1}.choice.wrong{border-color:var(--bad);color:var(--bad);background:#fbefee}.choice:disabled{opacity:1}.explain{margin-top:13px;padding:14px;border-radius:14px;background:#f0ece3;font-size:14px;line-height:1.55}.result{text-align:center;padding:27px 20px;border-radius:24px;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow)}.score{display:grid;place-items:center;width:150px;height:150px;margin:14px auto 20px;border-radius:50%;background:conic-gradient(var(--unit) var(--score),#e4ded2 0);font-size:42px;font-weight:950}.toast{position:fixed;left:50%;bottom:92px;transform:translate(-50%,20px);z-index:50;padding:11px 15px;border-radius:999px;background:var(--deep);color:white;font-size:13px;opacity:0;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:430px){.top{height:60px;padding:8px 10px}.brand b{font-size:15px}.brand small{font-size:10px}main{padding:14px 10px 88px}h1{font-size:31px}.summary div{border-radius:11px;padding:9px 6px}.unit,.sub{border-radius:13px;padding:12px}.cornell{grid-template-columns:35% 65%;min-height:285px;border-radius:14px}.cue,.note{padding:14px 10px}.note h3{font-size:21px}.hint{font-size:14px}.qcard{padding:12px;border-radius:14px}.qcard h2{font-size:18px}.choice{padding:11px;font-size:15px}.bottom span{height:17px;font-size:15px}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;app&quot;&gt;
&lt;header class=&quot;top&quot;&gt;&lt;button class=&quot;brand&quot; data-go=&quot;home&quot;&gt;&lt;span class=&quot;mark&quot;&gt;史&lt;/span&gt;&lt;span&gt;&lt;b&gt;YM 역사2&lt;/b&gt;&lt;small&gt;요점 정리 · 소단원별 20문항&lt;/small&gt;&lt;/span&gt;&lt;/button&gt;&lt;button id=&quot;recordBtn&quot; class=&quot;icon&quot;&gt;기록&lt;/button&gt;&lt;/header&gt;
&lt;main id=&quot;app&quot;&gt;&lt;/main&gt;
&lt;nav class=&quot;bottom&quot;&gt;&lt;button data-go=&quot;home&quot;&gt;&lt;span&gt;⌂&lt;/span&gt;홈&lt;/button&gt;&lt;button data-go=&quot;subunits&quot;&gt;&lt;span&gt;☷&lt;/span&gt;소단원&lt;/button&gt;&lt;button data-go=&quot;memory&quot;&gt;&lt;span&gt;▣&lt;/span&gt;암기&lt;/button&gt;&lt;button data-go=&quot;quiz&quot;&gt;&lt;span&gt;?&lt;/span&gt;시험&lt;/button&gt;&lt;/nav&gt;
&lt;div id=&quot;toast&quot; class=&quot;toast&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
const UNITS=[
{id:1,title:&quot;선사 문화와 고대 국가의 형성&quot;,short:&quot;선사·고조선·삼국&quot;,color:&quot;#d97757&quot;,subs:[
S(&quot;1-1-1&quot;,&quot;선사 문화와 고조선의 성장&quot;,[
F(&quot;구석기 시대&quot;,&quot;한반도&quot;,&quot;뗀석기·이동 생활&quot;,&quot;주먹도끼 등 뗀석기를 사용하고 사냥과 채집을 하며 이동 생활을 하였다.&quot;),
F(&quot;신석기 시대&quot;,&quot;한반도&quot;,&quot;농경과 정착&quot;,&quot;간석기와 빗살무늬 토기를 사용하고 움집을 지으며 정착 생활을 시작하였다.&quot;),
F(&quot;청동기 시대&quot;,&quot;한반도&quot;,&quot;계급 발생&quot;,&quot;비파형 동검과 고인돌이 나타나고 사유 재산과 계급이 발생하였다.&quot;),
F(&quot;고조선&quot;,&quot;만주·한반도 북부&quot;,&quot;우리 역사 최초의 국가&quot;,&quot;단군 신화를 바탕으로 성장하였고 8조법을 통해 사회 질서를 알 수 있다.&quot;),
F(&quot;위만 조선&quot;,&quot;고조선&quot;,&quot;중계 무역 발달&quot;,&quot;철기 문화를 바탕으로 성장하고 한과 진 사이에서 중계 무역을 하였다.&quot;)
]),
S(&quot;1-1-2&quot;,&quot;여러 나라의 성장&quot;,[
F(&quot;부여&quot;,&quot;만주 쑹화강 유역&quot;,&quot;사출도&quot;,&quot;왕 아래 마가·우가·저가·구가가 각 지역을 다스렸다.&quot;),
F(&quot;고구려&quot;,&quot;졸본 지역&quot;,&quot;제가 회의&quot;,&quot;산악 지대에서 성장하였고 약탈 경제와 활발한 정복 활동이 특징이다.&quot;),
F(&quot;옥저&quot;,&quot;함경도 해안&quot;,&quot;민며느리제&quot;,&quot;왕이 없고 읍군·삼로가 다스렸으며 고구려에 공물을 바쳤다.&quot;),
F(&quot;동예&quot;,&quot;강원 북부&quot;,&quot;책화와 무천&quot;,&quot;족외혼과 책화 풍습이 있었고 10월에 무천 제천 행사를 열었다.&quot;),
F(&quot;삼한&quot;,&quot;한반도 남부&quot;,&quot;소도와 천군&quot;,&quot;제정이 분리되어 정치 지배자와 제사장인 천군이 구분되었다.&quot;)
]),
S(&quot;1-2-1&quot;,&quot;삼국의 성립&quot;,[
F(&quot;고구려&quot;,&quot;태조왕&quot;,&quot;옥저 정복&quot;,&quot;계루부 고씨 왕위 세습과 옥저 정복으로 초기 국가 체제를 정비하였다.&quot;),
F(&quot;백제&quot;,&quot;고이왕&quot;,&quot;관등제 정비&quot;,&quot;6좌평과 16관등을 마련하고 한강 유역을 바탕으로 성장하였다.&quot;),
F(&quot;신라&quot;,&quot;내물왕&quot;,&quot;김씨 왕위 세습&quot;,&quot;마립간 칭호를 사용하고 김씨 왕위 세습으로 지배 체제를 강화하였다.&quot;),
F(&quot;가야&quot;,&quot;김해·고령&quot;,&quot;철 생산과 연맹 왕국&quot;,&quot;철이 풍부하여 낙랑·왜와 교역하였으나 중앙 집권 국가로 발전하지 못하였다.&quot;),
F(&quot;삼국 초기&quot;,&quot;각국&quot;,&quot;율령·관등·왕위 세습&quot;,&quot;왕권 강화와 중앙 집권 체제 마련이 국가 발전의 공통 과제였다.&quot;)
]),
S(&quot;1-2-2&quot;,&quot;삼국의 발전과 경쟁&quot;,[
F(&quot;백제 근초고왕&quot;,&quot;4세기&quot;,&quot;마한 병합과 해외 진출&quot;,&quot;한강 유역을 장악하고 평양성을 공격하였으며 요서·왜와 교류하였다.&quot;),
F(&quot;고구려 광개토 대왕&quot;,&quot;5세기 초&quot;,&quot;영토 확장&quot;,&quot;만주와 한강 이북을 장악하고 신라를 도와 왜를 격퇴하였다.&quot;),
F(&quot;고구려 장수왕&quot;,&quot;5세기&quot;,&quot;남진 정책&quot;,&quot;평양 천도 후 한강 유역을 차지하고 충주 고구려비를 남겼다.&quot;),
F(&quot;신라 진흥왕&quot;,&quot;6세기&quot;,&quot;한강 유역 차지&quot;,&quot;화랑도를 정비하고 한강 유역을 확보하여 삼국 경쟁의 주도권을 잡았다.&quot;),
F(&quot;백제 성왕&quot;,&quot;6세기&quot;,&quot;사비 천도와 중흥&quot;,&quot;국호를 남부여로 바꾸고 신라와 연합했으나 관산성 전투에서 전사하였다.&quot;)
]),
S(&quot;1-3-1&quot;,&quot;삼국의 문화와 대외 교류&quot;,[
F(&quot;불교 수용&quot;,&quot;삼국&quot;,&quot;왕권 강화와 사상 통합&quot;,&quot;고구려 소수림왕, 백제 침류왕, 신라 법흥왕 때 불교가 공인되었다.&quot;),
F(&quot;고분 문화&quot;,&quot;삼국&quot;,&quot;벽화·돌무지무덤·굴식 돌방무덤&quot;,&quot;고분은 지배층의 생활과 사후 세계관을 보여 주는 자료이다.&quot;),
F(&quot;백제 문화&quot;,&quot;일본 교류&quot;,&quot;아직기·왕인&quot;,&quot;한자와 유교, 불교와 건축 기술을 일본에 전해 주었다.&quot;),
F(&quot;신라 문화&quot;,&quot;경주&quot;,&quot;황룡사와 첨성대&quot;,&quot;불교 문화와 천문 관측 기술이 발달하였다.&quot;),
F(&quot;삼국의 대외 교류&quot;,&quot;동아시아&quot;,&quot;중국·서역·일본과 교류&quot;,&quot;문화 교류를 통해 삼국 문화가 다양하게 발전하였다.&quot;)
])]},
{id:2,title:&quot;남북국 시대의 전개&quot;,short:&quot;통일 신라와 발해&quot;,color:&quot;#8a6fb3&quot;,subs:[
S(&quot;2-1-1&quot;,&quot;고구려와 수·당 전쟁&quot;,[
F(&quot;살수 대첩&quot;,&quot;612년&quot;,&quot;을지문덕&quot;,&quot;고구려가 수의 대군을 살수에서 크게 물리쳐 수 멸망의 원인이 되었다.&quot;),
F(&quot;천리장성&quot;,&quot;고구려&quot;,&quot;당 침입 대비&quot;,&quot;연개소문 집권 전후 고구려가 북쪽 방어를 강화하기 위해 쌓았다.&quot;),
F(&quot;안시성 전투&quot;,&quot;645년&quot;,&quot;양만춘&quot;,&quot;고구려가 당 태종의 침입을 막아낸 대표적인 방어전이다.&quot;),
F(&quot;나당 연합&quot;,&quot;7세기&quot;,&quot;백제·고구려 멸망&quot;,&quot;신라가 당과 연합하여 백제와 고구려를 차례로 멸망시켰다.&quot;),
F(&quot;고구려 멸망&quot;,&quot;668년&quot;,&quot;내분과 외세&quot;,&quot;지배층 분열과 나당 연합군의 공격으로 멸망하였다.&quot;)
]),
S(&quot;2-1-2&quot;,&quot;신라의 삼국 통일과 발해의 성립&quot;,[
F(&quot;매소성 전투&quot;,&quot;675년&quot;,&quot;나당 전쟁&quot;,&quot;신라가 당군을 물리쳐 한반도 지배권을 지켰다.&quot;),
F(&quot;기벌포 전투&quot;,&quot;676년&quot;,&quot;삼국 통일 완성&quot;,&quot;신라가 당의 수군을 격파하고 한반도 남부 통일을 완성하였다.&quot;),
F(&quot;발해 건국&quot;,&quot;698년&quot;,&quot;대조영&quot;,&quot;고구려 유민과 말갈인을 이끌고 동모산에서 발해를 세웠다.&quot;),
F(&quot;남북국 시대&quot;,&quot;8세기&quot;,&quot;통일 신라와 발해 공존&quot;,&quot;신라와 발해가 한반도 남부와 만주 지역에서 함께 발전하였다.&quot;),
F(&quot;발해의 계승 의식&quot;,&quot;발해&quot;,&quot;고구려 계승&quot;,&quot;일본에 보낸 국서에서 고려 국왕이라 칭하며 고구려 계승을 드러냈다.&quot;)
]),
S(&quot;2-2-1&quot;,&quot;통일 신라와 발해의 발전&quot;,[
F(&quot;신문왕&quot;,&quot;통일 신라&quot;,&quot;왕권 강화&quot;,&quot;김흠돌의 난을 진압하고 국학 설치, 관료전 지급, 9주 5소경 정비를 추진하였다.&quot;),
F(&quot;9주 5소경&quot;,&quot;통일 신라&quot;,&quot;지방 통치&quot;,&quot;전국을 9주로 나누고 5소경을 두어 수도의 치우침을 보완하였다.&quot;),
F(&quot;녹읍 폐지&quot;,&quot;신문왕&quot;,&quot;귀족 경제력 약화&quot;,&quot;관료전을 지급하고 녹읍을 폐지하여 귀족의 사적 지배력을 줄이려 하였다.&quot;),
F(&quot;발해 무왕&quot;,&quot;8세기&quot;,&quot;대외 팽창&quot;,&quot;장문휴를 보내 당의 산둥 지방을 공격하고 영토를 넓혔다.&quot;),
F(&quot;발해 문왕&quot;,&quot;8세기&quot;,&quot;제도 정비&quot;,&quot;당의 3성 6부를 수용하고 상경 용천부로 천도하여 국가 체제를 정비하였다.&quot;)
]),
S(&quot;2-2-2&quot;,&quot;남북국의 쇠퇴와 후삼국의 성립&quot;,[
F(&quot;혜공왕 피살&quot;,&quot;통일 신라&quot;,&quot;왕위 쟁탈 심화&quot;,&quot;진골 귀족의 왕위 다툼이 심해지며 중앙 통치가 흔들렸다.&quot;),
F(&quot;호족 성장&quot;,&quot;지방&quot;,&quot;지방 세력 확대&quot;,&quot;중앙 정부 통제가 약해지자 지방의 군사·경제력을 가진 세력이 성장하였다.&quot;),
F(&quot;후백제 건국&quot;,&quot;900년&quot;,&quot;견훤&quot;,&quot;완산주를 중심으로 후백제를 세우고 신라를 압박하였다.&quot;),
F(&quot;후고구려 건국&quot;,&quot;901년&quot;,&quot;궁예&quot;,&quot;송악을 중심으로 세력을 키우고 뒤에 국호를 태봉으로 바꾸었다.&quot;),
F(&quot;발해 멸망&quot;,&quot;926년&quot;,&quot;거란 침입&quot;,&quot;발해는 지배층 분열과 거란의 공격으로 멸망하였다.&quot;)
]),
S(&quot;2-3-1&quot;,&quot;남북국의 문화와 대외 관계&quot;,[
F(&quot;불국사와 석굴암&quot;,&quot;통일 신라&quot;,&quot;불교 예술의 절정&quot;,&quot;정교한 건축과 조각으로 통일 신라 불교 문화의 수준을 보여 준다.&quot;),
F(&quot;성덕 대왕 신종&quot;,&quot;통일 신라&quot;,&quot;금속 공예&quot;,&quot;뛰어난 주조 기술과 아름다운 소리로 유명하다.&quot;),
F(&quot;장보고&quot;,&quot;청해진&quot;,&quot;해상 무역 장악&quot;,&quot;완도에 청해진을 설치하여 해적을 소탕하고 동아시아 해상 무역을 주도하였다.&quot;),
F(&quot;발해 상경성&quot;,&quot;발해&quot;,&quot;당 장안성 모방&quot;,&quot;도시 구조에서 당 문화의 영향을 확인할 수 있다.&quot;),
F(&quot;발해 문화&quot;,&quot;발해&quot;,&quot;고구려 문화와 당 문화 결합&quot;,&quot;온돌과 석등 등에서 고구려 계승과 국제 문화 수용이 함께 나타난다.&quot;)
])]},
{id:3,title:&quot;고려의 성립과 변천&quot;,short:&quot;고려 정치·대외 관계·문화&quot;,color:&quot;#37847a&quot;,subs:[
S(&quot;3-1-1&quot;,&quot;고려의 후삼국 통일&quot;,[
F(&quot;고려 건국&quot;,&quot;918년&quot;,&quot;왕건&quot;,&quot;궁예를 몰아내고 송악에서 고려를 세웠다.&quot;),
F(&quot;공산 전투&quot;,&quot;927년&quot;,&quot;후백제 우세&quot;,&quot;견훤의 후백제가 왕건의 군대를 크게 물리쳤다.&quot;),
F(&quot;고창 전투&quot;,&quot;930년&quot;,&quot;고려 우세&quot;,&quot;고려가 후백제를 물리치고 후삼국 통일의 주도권을 잡았다.&quot;),
F(&quot;후삼국 통일&quot;,&quot;936년&quot;,&quot;고려&quot;,&quot;신라 항복과 후백제 멸망으로 고려가 후삼국을 통일하였다.&quot;),
F(&quot;민족 재통합&quot;,&quot;고려&quot;,&quot;고구려 계승과 포용&quot;,&quot;발해 유민을 받아들이고 후삼국을 통합하였다.&quot;)
]),
S(&quot;3-1-2&quot;,&quot;고려 통치 체제의 정비&quot;,[
F(&quot;태조의 정책&quot;,&quot;고려&quot;,&quot;호족 통합&quot;,&quot;혼인 정책과 사성 정책으로 호족을 포섭하고 북진 정책을 추진하였다.&quot;),
F(&quot;광종&quot;,&quot;고려&quot;,&quot;노비안검법·과거제&quot;,&quot;호족 세력을 약화하고 왕권을 강화하였다.&quot;),
F(&quot;성종&quot;,&quot;고려&quot;,&quot;유교 정치 이념&quot;,&quot;최승로의 시무 28조를 수용하고 12목에 지방관을 파견하였다.&quot;),
F(&quot;2성 6부&quot;,&quot;고려 중앙&quot;,&quot;중앙 통치 조직&quot;,&quot;중서문하성과 상서성을 중심으로 중앙 행정을 운영하였다.&quot;),
F(&quot;음서와 과거&quot;,&quot;고려&quot;,&quot;관리 등용&quot;,&quot;과거제가 시행되었지만 귀족 자제는 음서로 관직에 나아갈 수 있었다.&quot;)
]),
S(&quot;3-1-3&quot;,&quot;문벌 사회의 동요 및 무신 정권의 성립&quot;,[
F(&quot;문벌 귀족&quot;,&quot;고려 전기&quot;,&quot;음서·공음전&quot;,&quot;가문과 혼인을 바탕으로 정치·경제적 특권을 누렸다.&quot;),
F(&quot;이자겸의 난&quot;,&quot;1126년&quot;,&quot;문벌 사회 동요&quot;,&quot;왕실 외척인 이자겸이 권력을 독점하다 난을 일으켰다.&quot;),
F(&quot;묘청의 서경 천도 운동&quot;,&quot;1135년&quot;,&quot;서경 세력&quot;,&quot;서경 천도와 금 정벌을 주장했으나 김부식 등 개경 세력에게 진압되었다.&quot;),
F(&quot;무신 정변&quot;,&quot;1170년&quot;,&quot;무신 집권 시작&quot;,&quot;차별받던 무신들이 정변을 일으켜 정권을 장악하였다.&quot;),
F(&quot;최씨 무신 정권&quot;,&quot;고려&quot;,&quot;교정도감·도방&quot;,&quot;최충헌 이후 최씨 일가가 강력한 무신 정권을 운영하였다.&quot;)
]),
S(&quot;3-2-1&quot;,&quot;고려 전기의 대외 관계&quot;,[
F(&quot;거란 1차 침입&quot;,&quot;993년&quot;,&quot;서희의 외교 담판&quot;,&quot;서희가 담판으로 강동 6주를 확보하였다.&quot;),
F(&quot;강감찬&quot;,&quot;1019년&quot;,&quot;귀주 대첩&quot;,&quot;고려가 거란의 대군을 크게 물리쳤다.&quot;),
F(&quot;여진 정벌&quot;,&quot;1107년&quot;,&quot;윤관의 별무반&quot;,&quot;동북 9성을 쌓았으나 방어 부담으로 돌려주었다.&quot;),
F(&quot;금과 사대 관계&quot;,&quot;12세기&quot;,&quot;현실 외교&quot;,&quot;고려는 군사적 충돌을 피하고 금과 사대 관계를 맺었다.&quot;),
F(&quot;벽란도&quot;,&quot;고려&quot;,&quot;국제 무역항&quot;,&quot;송·아라비아 상인 등이 왕래한 국제 무역의 중심지였다.&quot;)
]),
S(&quot;3-2-2&quot;,&quot;고려의 대몽 항쟁&quot;,[
F(&quot;몽골 침입&quot;,&quot;1231년 이후&quot;,&quot;장기 항쟁&quot;,&quot;몽골이 여러 차례 침입하자 고려가 장기간 저항하였다.&quot;),
F(&quot;강화도 천도&quot;,&quot;1232년&quot;,&quot;무신 정권의 항쟁&quot;,&quot;최우 정권이 수도를 강화도로 옮겨 몽골에 맞섰다.&quot;),
F(&quot;팔만대장경&quot;,&quot;고려&quot;,&quot;부처의 힘으로 국난 극복&quot;,&quot;몽골 침입 속에서 대장경판을 새겨 불교적 염원을 담았다.&quot;),
F(&quot;삼별초 항쟁&quot;,&quot;1270~1273년&quot;,&quot;개경 환도 반대&quot;,&quot;강화도·진도·제주도로 옮겨 가며 몽골과 고려 정부에 저항하였다.&quot;),
F(&quot;원 간섭 시작&quot;,&quot;13세기 후반&quot;,&quot;자주성 약화&quot;,&quot;고려는 원의 부마국이 되고 정치 간섭을 받게 되었다.&quot;)
]),
S(&quot;3-3-1&quot;,&quot;원의 간섭과 공민왕의 개혁&quot;,[
F(&quot;정동행성&quot;,&quot;원 간섭기&quot;,&quot;내정 간섭 기구&quot;,&quot;일본 원정을 위해 설치되었고 이후 고려 내정 간섭에 이용되었다.&quot;),
F(&quot;쌍성총관부&quot;,&quot;원 간섭기&quot;,&quot;동북 지역 지배&quot;,&quot;원이 고려의 동북 지역 일부를 직접 지배하였다.&quot;),
F(&quot;권문세족&quot;,&quot;원 간섭기&quot;,&quot;친원 세력&quot;,&quot;대농장과 노비를 늘리며 사회 모순을 키웠다.&quot;),
F(&quot;공민왕 개혁&quot;,&quot;14세기&quot;,&quot;반원 자주 정책&quot;,&quot;쌍성총관부를 공격하고 정동행성 이문소를 폐지하였다.&quot;),
F(&quot;신돈의 전민변정도감&quot;,&quot;공민왕&quot;,&quot;토지·노비 개혁&quot;,&quot;권문세족이 빼앗은 토지와 노비를 바로잡으려 하였다.&quot;)
]),
S(&quot;3-3-2&quot;,&quot;새로운 정치 세력의 등장&quot;,[
F(&quot;신진 사대부&quot;,&quot;고려 말&quot;,&quot;성리학 수용&quot;,&quot;과거를 통해 진출하고 권문세족의 폐단을 비판하였다.&quot;),
F(&quot;왜구 격퇴&quot;,&quot;고려 말&quot;,&quot;최무선 화포&quot;,&quot;진포 대첩 등에서 화포를 활용해 왜구를 물리쳤다.&quot;),
F(&quot;홍건적 격퇴&quot;,&quot;14세기&quot;,&quot;공민왕 시기&quot;,&quot;홍건적 침입으로 개경이 함락되기도 했으나 고려가 격퇴하였다.&quot;),
F(&quot;위화도 회군&quot;,&quot;1388년&quot;,&quot;이성계&quot;,&quot;요동 정벌에 반대하여 군대를 돌려 정치 권력을 장악하였다.&quot;),
F(&quot;조선 건국 준비&quot;,&quot;고려 말&quot;,&quot;급진 개혁파&quot;,&quot;정도전 등은 토지 개혁과 새 왕조 건설을 추진하였다.&quot;)
]),
S(&quot;3-4-1&quot;,&quot;고려의 생활과 문화&quot;,[
F(&quot;고려 불교&quot;,&quot;고려&quot;,&quot;국가와 사회 통합&quot;,&quot;연등회·팔관회가 열리고 불교가 생활과 정치에 큰 영향을 주었다.&quot;),
F(&quot;의천&quot;,&quot;고려 중기&quot;,&quot;천태종 개창&quot;,&quot;교종을 중심으로 선종을 통합하려 하였다.&quot;),
F(&quot;지눌&quot;,&quot;고려 후기&quot;,&quot;조계종과 수선사 결사&quot;,&quot;선종 중심의 불교 개혁과 정혜쌍수를 강조하였다.&quot;),
F(&quot;고려청자&quot;,&quot;고려&quot;,&quot;상감 청자&quot;,&quot;비색과 상감 기법으로 귀족적이고 세련된 아름다움을 보여 준다.&quot;),
F(&quot;직지심체요절&quot;,&quot;1377년&quot;,&quot;금속 활자&quot;,&quot;현존하는 세계에서 가장 오래된 금속 활자본이다.&quot;)
])]},
{id:4,title:&quot;조선의 성립과 발전&quot;,short:&quot;조선 전기 정치·문화·전쟁&quot;,color:&quot;#c28a2c&quot;,subs:[
S(&quot;4-1-1&quot;,&quot;조선의 통치 체제의 정비와 대외 관계&quot;,[
F(&quot;조선 건국&quot;,&quot;1392년&quot;,&quot;이성계&quot;,&quot;고려를 대신해 유교 이념을 바탕으로 새 왕조를 세웠다.&quot;),
F(&quot;한양 천도&quot;,&quot;1394년&quot;,&quot;수도 정비&quot;,&quot;풍수와 교통의 이점을 고려하여 한양을 수도로 삼았다.&quot;),
F(&quot;경국대전&quot;,&quot;성종 때 완성&quot;,&quot;통치 법전&quot;,&quot;조선의 기본 법전으로 중앙 집권 체제를 제도화하였다.&quot;),
F(&quot;의정부와 6조&quot;,&quot;조선 중앙&quot;,&quot;중앙 정치 기구&quot;,&quot;의정부가 국정을 총괄하고 6조가 행정을 담당하였다.&quot;),
F(&quot;사대교린&quot;,&quot;조선 외교&quot;,&quot;명과 사대·여진/일본과 교린&quot;,&quot;안정적인 국제 관계를 유지하려는 외교 원칙이었다.&quot;)
]),
S(&quot;4-2-1&quot;,&quot;사림의 성장과 붕당의 등장&quot;,[
F(&quot;훈구&quot;,&quot;조선 전기&quot;,&quot;공신 중심 세력&quot;,&quot;세조 집권 이후 중앙 정치를 주도한 기득권 세력이다.&quot;),
F(&quot;사림&quot;,&quot;조선 전기&quot;,&quot;성리학적 명분 중시&quot;,&quot;향촌에서 성장하여 삼사에 진출하고 훈구의 비리를 비판하였다.&quot;),
F(&quot;사화&quot;,&quot;15~16세기&quot;,&quot;사림 탄압&quot;,&quot;훈구와 사림의 대립 속에서 사림이 여러 차례 피해를 입었다.&quot;),
F(&quot;서원과 향약&quot;,&quot;사림&quot;,&quot;향촌 지배 기반&quot;,&quot;교육과 제사, 향촌 질서 유지를 통해 사림의 영향력이 커졌다.&quot;),
F(&quot;붕당의 등장&quot;,&quot;선조 때&quot;,&quot;동인과 서인&quot;,&quot;이조 전랑 임명을 둘러싼 갈등으로 정치 세력이 나뉘었다.&quot;)
]),
S(&quot;4-3-1&quot;,&quot;조선 전기의 문화 발달&quot;,[
F(&quot;훈민정음 창제&quot;,&quot;1443년&quot;,&quot;세종&quot;,&quot;백성이 쉽게 문자 생활을 할 수 있도록 우리 문자를 만들었다.&quot;),
F(&quot;집현전&quot;,&quot;세종&quot;,&quot;학문 연구 기관&quot;,&quot;학자들이 정치·과학·문화를 연구하며 세종의 개혁을 뒷받침하였다.&quot;),
F(&quot;측우기&quot;,&quot;세종 때&quot;,&quot;강우량 측정&quot;,&quot;농업에 필요한 강수량을 과학적으로 측정하였다.&quot;),
F(&quot;농사직설&quot;,&quot;세종 때&quot;,&quot;농업 기술서&quot;,&quot;우리 풍토에 맞는 농법을 정리한 책이다.&quot;),
F(&quot;동국여지승람&quot;,&quot;조선 전기&quot;,&quot;지리서&quot;,&quot;각 지역의 자연·인문 정보를 정리하여 통치에 활용하였다.&quot;)
]),
S(&quot;4-4-1&quot;,&quot;왜란의 발발과 극복&quot;,[
F(&quot;임진왜란 발발&quot;,&quot;1592년&quot;,&quot;일본 침략&quot;,&quot;도요토미 히데요시가 명 정복을 구실로 조선을 침략하였다.&quot;),
F(&quot;이순신&quot;,&quot;임진왜란&quot;,&quot;수군 승리&quot;,&quot;한산도 대첩 등으로 일본의 보급로를 차단하였다.&quot;),
F(&quot;의병 활동&quot;,&quot;임진왜란&quot;,&quot;민중 저항&quot;,&quot;곽재우 등 의병장이 각지에서 일본군에 맞서 싸웠다.&quot;),
F(&quot;명군 참전&quot;,&quot;임진왜란&quot;,&quot;조·명 연합&quot;,&quot;명군이 참전하면서 전쟁 양상이 바뀌었다.&quot;),
F(&quot;전쟁의 영향&quot;,&quot;조선·동아시아&quot;,&quot;국토 황폐화와 질서 변화&quot;,&quot;조선은 큰 피해를 입고 명·일본에도 정치 변화가 나타났다.&quot;)
]),
S(&quot;4-4-2&quot;,&quot;호란의 발발과 영향&quot;,[
F(&quot;광해군 중립 외교&quot;,&quot;17세기 초&quot;,&quot;명·후금 사이 실리 외교&quot;,&quot;명과 후금 사이에서 전쟁을 피하려 하였다.&quot;),
F(&quot;인조반정&quot;,&quot;1623년&quot;,&quot;서인 집권&quot;,&quot;광해군을 몰아내고 친명 배금 정책을 추진하였다.&quot;),
F(&quot;정묘호란&quot;,&quot;1627년&quot;,&quot;후금 침입&quot;,&quot;후금이 조선을 침입하여 형제 관계를 맺었다.&quot;),
F(&quot;병자호란&quot;,&quot;1636년&quot;,&quot;청 침입&quot;,&quot;청이 군신 관계를 요구하며 조선을 침입하였다.&quot;),
F(&quot;삼전도 굴욕&quot;,&quot;1637년&quot;,&quot;인조 항복&quot;,&quot;조선이 청에 항복하고 군신 관계를 맺었다.&quot;)
])]},
{id:5,title:&quot;조선 후기 사회 변화&quot;,short:&quot;정치·경제·사회·문화 변화&quot;,color:&quot;#4f6da8&quot;,subs:[
S(&quot;5-1-1&quot;,&quot;제도의 개편과 붕당 정치의 전개&quot;,[
F(&quot;비변사 확대&quot;,&quot;조선 후기&quot;,&quot;국정 총괄 기구화&quot;,&quot;왜란과 호란을 거치며 군사 기구였던 비변사의 권한이 커졌다.&quot;),
F(&quot;영정법&quot;,&quot;인조&quot;,&quot;전세 개편&quot;,&quot;토지 1결당 쌀 4~6두로 전세 부담을 고정하였다.&quot;),
F(&quot;대동법&quot;,&quot;광해군 이후&quot;,&quot;공납 개혁&quot;,&quot;특산물 대신 토지 결수에 따라 쌀·베·동전으로 납부하게 하였다.&quot;),
F(&quot;균역법&quot;,&quot;영조&quot;,&quot;군역 부담 완화&quot;,&quot;군포를 1년에 1필로 줄이고 부족분을 다른 재원으로 보충하였다.&quot;),
F(&quot;예송 논쟁&quot;,&quot;현종 때&quot;,&quot;서인·남인 대립&quot;,&quot;왕실 의례 문제를 둘러싸고 붕당 간 대립이 격화되었다.&quot;)
]),
S(&quot;5-1-2&quot;,&quot;탕평 정치 및 세도 정치의 전개&quot;,[
F(&quot;영조의 탕평책&quot;,&quot;18세기&quot;,&quot;완론 중심 등용&quot;,&quot;붕당의 폐단을 줄이고 왕권을 강화하려 하였다.&quot;),
F(&quot;정조의 개혁&quot;,&quot;18세기 후반&quot;,&quot;규장각·장용영&quot;,&quot;개혁 정치를 추진하고 친위 부대를 두어 왕권을 뒷받침하였다.&quot;),
F(&quot;수원 화성&quot;,&quot;정조&quot;,&quot;개혁 도시&quot;,&quot;정조의 정치적 구상과 과학 기술이 반영된 성곽이다.&quot;),
F(&quot;세도 정치&quot;,&quot;19세기&quot;,&quot;외척 가문 권력 독점&quot;,&quot;안동 김씨 등 일부 가문이 정치 권력을 독점하였다.&quot;),
F(&quot;삼정의 문란&quot;,&quot;19세기&quot;,&quot;전정·군정·환곡 폐단&quot;,&quot;세도 정치 아래 농민 부담과 사회 불만이 커졌다.&quot;)
]),
S(&quot;5-2-1&quot;,&quot;조선 후기 경제와 사회의 변화&quot;,[
F(&quot;모내기법 확대&quot;,&quot;조선 후기&quot;,&quot;농업 생산력 증가&quot;,&quot;이앙법 확산으로 노동력이 절약되고 이모작이 가능해졌다.&quot;),
F(&quot;상품 작물 재배&quot;,&quot;조선 후기&quot;,&quot;상업적 농업&quot;,&quot;면화·담배·인삼 등 판매 목적의 작물 재배가 늘었다.&quot;),
F(&quot;공인&quot;,&quot;대동법 이후&quot;,&quot;상업 발달&quot;,&quot;관청에 필요한 물품을 조달하며 상품 화폐 경제 발달을 이끌었다.&quot;),
F(&quot;사상 성장&quot;,&quot;조선 후기&quot;,&quot;민간 상인&quot;,&quot;송상·만상 등 사상이 전국적 유통망을 형성하였다.&quot;),
F(&quot;신분제 동요&quot;,&quot;조선 후기&quot;,&quot;양반 증가·노비 감소&quot;,&quot;납속과 족보 매입 등으로 양반 수가 늘고 신분 질서가 흔들렸다.&quot;)
]),
S(&quot;5-2-2&quot;,&quot;농민 봉기의 발생&quot;,[
F(&quot;홍경래의 난&quot;,&quot;1811년&quot;,&quot;평안도 차별 반발&quot;,&quot;세도 정치와 지역 차별, 수탈에 저항한 봉기이다.&quot;),
F(&quot;임술 농민 봉기&quot;,&quot;1862년&quot;,&quot;진주에서 시작&quot;,&quot;삼정의 문란에 대한 불만이 전국적 농민 봉기로 확산되었다.&quot;),
F(&quot;암행어사 파견&quot;,&quot;조선 후기&quot;,&quot;수령 감찰&quot;,&quot;정부는 지방 관리의 부정을 조사하려 하였으나 근본 해결은 어려웠다.&quot;),
F(&quot;삼정이정청&quot;,&quot;1862년&quot;,&quot;개혁 기구&quot;,&quot;삼정의 문란을 바로잡기 위해 설치되었지만 큰 성과를 거두지 못하였다.&quot;),
F(&quot;농민 의식 성장&quot;,&quot;19세기&quot;,&quot;사회 개혁 요구&quot;,&quot;농민들은 수탈에 저항하며 사회 변화의 주체로 성장하였다.&quot;)
]),
S(&quot;5-3-1&quot;,&quot;조선 후기 학문과 예술의 새로운 경향&quot;,[
F(&quot;실학&quot;,&quot;조선 후기&quot;,&quot;현실 개혁 학문&quot;,&quot;사회 문제 해결과 민생 안정을 중시한 학문 경향이다.&quot;),
F(&quot;유형원·이익&quot;,&quot;경세치용&quot;,&quot;토지 제도 개혁&quot;,&quot;토지 소유 문제와 국가 제도 개혁에 관심을 두었다.&quot;),
F(&quot;박지원·박제가&quot;,&quot;북학파&quot;,&quot;상공업 진흥&quot;,&quot;청 문물 수용과 상공업 발전을 주장하였다.&quot;),
F(&quot;서민 문화&quot;,&quot;조선 후기&quot;,&quot;판소리·탈춤·한글 소설&quot;,&quot;서민 의식 성장과 함께 새로운 문화가 발달하였다.&quot;),
F(&quot;진경산수화·풍속화&quot;,&quot;조선 후기&quot;,&quot;우리 현실 표현&quot;,&quot;정선과 김홍도·신윤복 등이 우리 자연과 생활 모습을 그렸다.&quot;)
])]},
{id:6,title:&quot;근현대 사회의 전개&quot;,short:&quot;개항·독립·민주주의·통일&quot;,color:&quot;#527e49&quot;,subs:[
S(&quot;6-1-1&quot;,&quot;국민 국가 수립을 위한 다양한 노력&quot;,[
F(&quot;흥선 대원군&quot;,&quot;19세기 후반&quot;,&quot;왕권 강화와 통상 수교 거부&quot;,&quot;서원 철폐와 경복궁 중건을 추진하고 외세 침입에 맞섰다.&quot;),
F(&quot;강화도 조약&quot;,&quot;1876년&quot;,&quot;개항&quot;,&quot;조선이 일본과 맺은 불평등 조약으로 부산 등 항구를 열었다.&quot;),
F(&quot;갑신정변&quot;,&quot;1884년&quot;,&quot;급진 개화파&quot;,&quot;김옥균 등이 근대 국가 수립을 목표로 정변을 일으켰으나 실패하였다.&quot;),
F(&quot;동학 농민 운동&quot;,&quot;1894년&quot;,&quot;반봉건·반외세&quot;,&quot;농민들이 탐관오리와 외세 침략에 맞서 개혁을 요구하였다.&quot;),
F(&quot;갑오개혁&quot;,&quot;1894년&quot;,&quot;근대 제도 개혁&quot;,&quot;신분제 폐지 등 근대적 제도 개혁이 추진되었다.&quot;)
]),
S(&quot;6-1-2&quot;,&quot;독립을 위한 다양한 민족 운동&quot;,[
F(&quot;을사늑약&quot;,&quot;1905년&quot;,&quot;외교권 박탈&quot;,&quot;일제가 대한 제국의 외교권을 강제로 빼앗았다.&quot;),
F(&quot;의병 운동&quot;,&quot;항일 투쟁&quot;,&quot;무장 저항&quot;,&quot;을사늑약과 군대 해산 이후 항일 의병 투쟁이 확산되었다.&quot;),
F(&quot;애국 계몽 운동&quot;,&quot;1900년대&quot;,&quot;실력 양성&quot;,&quot;교육·산업 진흥을 통해 국권 회복을 이루려 하였다.&quot;),
F(&quot;3·1 운동&quot;,&quot;1919년&quot;,&quot;민족 독립 운동&quot;,&quot;전국적으로 독립 만세 시위가 전개되어 대한민국 임시 정부 수립에 영향을 주었다.&quot;),
F(&quot;대한민국 임시 정부&quot;,&quot;1919년&quot;,&quot;상하이&quot;,&quot;민주 공화제를 표방하고 독립운동을 이끌었다.&quot;)
]),
S(&quot;6-1-3&quot;,&quot;대한민국 정부의 수립&quot;,[
F(&quot;광복&quot;,&quot;1945년 8월 15일&quot;,&quot;일제 지배 종료&quot;,&quot;일본의 패전으로 우리 민족이 광복을 맞았다.&quot;),
F(&quot;모스크바 3국 외상 회의&quot;,&quot;1945년&quot;,&quot;한반도 문제 논의&quot;,&quot;임시 민주 정부 수립과 신탁 통치 문제가 논의되었다.&quot;),
F(&quot;5·10 총선거&quot;,&quot;1948년&quot;,&quot;제헌 국회 구성&quot;,&quot;남한에서 유엔 감시 아래 총선거가 실시되었다.&quot;),
F(&quot;대한민국 정부 수립&quot;,&quot;1948년 8월 15일&quot;,&quot;민주 공화국&quot;,&quot;제헌 헌법에 따라 대한민국 정부가 수립되었다.&quot;),
F(&quot;북한 정권 수립&quot;,&quot;1948년 9월&quot;,&quot;분단 심화&quot;,&quot;북한에 조선 민주주의 인민 공화국이 수립되며 분단이 굳어졌다.&quot;)
]),
S(&quot;6-2-1&quot;,&quot;개항 이후 경제 변화와 식민지 경제 체제&quot;,[
F(&quot;개항 이후 무역&quot;,&quot;19세기 후반&quot;,&quot;일본 상인 진출&quot;,&quot;일본 상인의 활동과 곡물 유출로 조선 경제가 흔들렸다.&quot;),
F(&quot;방곡령&quot;,&quot;1889년 등&quot;,&quot;곡물 유출 방지&quot;,&quot;지방관이 곡물 유출을 막으려 했으나 일본의 압력으로 어려움을 겪었다.&quot;),
F(&quot;토지 조사 사업&quot;,&quot;1910년대&quot;,&quot;식민지 지배 기반&quot;,&quot;일제가 토지 소유권을 조사해 식민 통치 재정을 확보하였다.&quot;),
F(&quot;산미 증식 계획&quot;,&quot;1920년대&quot;,&quot;쌀 수탈&quot;,&quot;일본의 식량 부족 해결을 위해 조선의 쌀 생산과 반출을 늘렸다.&quot;),
F(&quot;병참 기지화 정책&quot;,&quot;1930년대 이후&quot;,&quot;전쟁 동원&quot;,&quot;일제가 침략 전쟁 수행을 위해 조선의 인력과 자원을 동원하였다.&quot;)
]),
S(&quot;6-2-2&quot;,&quot;광복 이후 경제 성장 및 사회 변화&quot;,[
F(&quot;농지 개혁&quot;,&quot;1950년 전후&quot;,&quot;자작농 증가&quot;,&quot;유상 매수·유상 분배 원칙으로 농민의 토지 소유가 확대되었다.&quot;),
F(&quot;경제 개발 5개년 계획&quot;,&quot;1960년대&quot;,&quot;수출 주도 성장&quot;,&quot;정부 주도 산업화와 수출 확대가 추진되었다.&quot;),
F(&quot;새마을 운동&quot;,&quot;1970년대&quot;,&quot;농촌 근대화&quot;,&quot;근면·자조·협동을 내세워 농촌 생활 환경 개선을 추진하였다.&quot;),
F(&quot;중화학 공업화&quot;,&quot;1970년대&quot;,&quot;산업 구조 변화&quot;,&quot;철강·조선·자동차 등 중화학 공업이 성장하였다.&quot;),
F(&quot;사회 변화&quot;,&quot;산업화 이후&quot;,&quot;도시화와 노동 문제&quot;,&quot;빠른 경제 성장 속에 도시 집중, 노동 문제, 빈부 격차가 나타났다.&quot;)
]),
S(&quot;6-3-1&quot;,&quot;헌법과 4·19 혁명&quot;,[
F(&quot;제헌 헌법&quot;,&quot;1948년&quot;,&quot;민주 공화국 원리&quot;,&quot;대한민국의 기본 질서와 국민의 권리·의무를 규정하였다.&quot;),
F(&quot;발췌 개헌&quot;,&quot;1952년&quot;,&quot;대통령 직선제&quot;,&quot;이승만 정부가 재집권을 위해 헌법을 바꾸었다.&quot;),
F(&quot;사사오입 개헌&quot;,&quot;1954년&quot;,&quot;장기 집권 기반&quot;,&quot;초대 대통령의 중임 제한을 없애기 위해 추진되었다.&quot;),
F(&quot;3·15 부정 선거&quot;,&quot;1960년&quot;,&quot;4·19 혁명 원인&quot;,&quot;자유당 정권의 부정 선거가 시민과 학생의 저항을 불러왔다.&quot;),
F(&quot;4·19 혁명&quot;,&quot;1960년&quot;,&quot;이승만 하야&quot;,&quot;학생과 시민의 민주화 운동으로 독재 정권이 무너졌다.&quot;)
]),
S(&quot;6-3-2&quot;,&quot;유신 독재와 민주화 운동&quot;,[
F(&quot;5·16 군사 정변&quot;,&quot;1961년&quot;,&quot;군부 집권&quot;,&quot;박정희 등 군부 세력이 정권을 장악하였다.&quot;),
F(&quot;유신 헌법&quot;,&quot;1972년&quot;,&quot;장기 집권 체제&quot;,&quot;대통령에게 강력한 권한을 부여하여 독재 체제를 강화하였다.&quot;),
F(&quot;부마 민주 항쟁&quot;,&quot;1979년&quot;,&quot;유신 반대&quot;,&quot;부산과 마산에서 유신 체제에 반대하는 시위가 일어났다.&quot;),
F(&quot;5·18 민주화 운동&quot;,&quot;1980년&quot;,&quot;광주&quot;,&quot;신군부에 맞서 민주주의를 요구한 시민들의 항쟁이다.&quot;),
F(&quot;민주화 운동 탄압&quot;,&quot;유신·신군부&quot;,&quot;인권 침해&quot;,&quot;긴급 조치와 계엄 등으로 민주화 요구가 억눌렸다.&quot;)
]),
S(&quot;6-3-3&quot;,&quot;민주주의의 발전&quot;,[
F(&quot;6월 민주 항쟁&quot;,&quot;1987년&quot;,&quot;대통령 직선제 요구&quot;,&quot;전국적 민주화 운동으로 6·29 민주화 선언을 이끌어 냈다.&quot;),
F(&quot;6·29 민주화 선언&quot;,&quot;1987년&quot;,&quot;직선제 개헌 수용&quot;,&quot;대통령 직선제와 기본권 보장을 약속하였다.&quot;),
F(&quot;1987년 헌법&quot;,&quot;제9차 개헌&quot;,&quot;현행 헌법&quot;,&quot;대통령 직선제와 5년 단임제를 규정하였다.&quot;),
F(&quot;지방 자치 부활&quot;,&quot;1990년대&quot;,&quot;민주주의 확대&quot;,&quot;지방 의회와 지방 자치 단체장 선거가 실시되었다.&quot;),
F(&quot;시민 사회 성장&quot;,&quot;현대&quot;,&quot;참여 민주주의&quot;,&quot;시민 단체와 언론, 여론이 정치 과정에 더 큰 영향을 미치게 되었다.&quot;)
]),
S(&quot;6-4-1&quot;,&quot;남북 분단과 6·25 전쟁&quot;,[
F(&quot;38도선 분할 점령&quot;,&quot;1945년&quot;,&quot;미소 군정&quot;,&quot;광복 직후 한반도가 북위 38도선을 경계로 나뉘어 점령되었다.&quot;),
F(&quot;6·25 전쟁 발발&quot;,&quot;1950년 6월 25일&quot;,&quot;북한 남침&quot;,&quot;북한군의 남침으로 전쟁이 시작되었다.&quot;),
F(&quot;인천 상륙 작전&quot;,&quot;1950년 9월&quot;,&quot;전세 역전&quot;,&quot;국군과 유엔군이 서울을 수복하고 북진할 수 있는 계기가 되었다.&quot;),
F(&quot;중국군 참전&quot;,&quot;1950년 말&quot;,&quot;전쟁 장기화&quot;,&quot;중국군의 개입으로 전선이 다시 남쪽으로 밀렸다.&quot;),
F(&quot;정전 협정&quot;,&quot;1953년 7월&quot;,&quot;휴전 체제&quot;,&quot;전쟁은 멈췄지만 평화 협정이 아닌 정전 상태가 이어졌다.&quot;)
]),
S(&quot;6-4-2&quot;,&quot;통일을 위한 노력&quot;,[
F(&quot;7·4 남북 공동 성명&quot;,&quot;1972년&quot;,&quot;자주·평화·민족 대단결&quot;,&quot;남북이 통일 원칙에 합의한 첫 공동 성명이다.&quot;),
F(&quot;남북 기본 합의서&quot;,&quot;1991년&quot;,&quot;화해와 불가침&quot;,&quot;남북이 상호 체제를 인정하고 교류 협력을 약속하였다.&quot;),
F(&quot;6·15 남북 공동 선언&quot;,&quot;2000년&quot;,&quot;남북 정상 회담&quot;,&quot;남북 정상이 만나 화해와 협력의 방향을 제시하였다.&quot;),
F(&quot;10·4 남북 공동 선언&quot;,&quot;2007년&quot;,&quot;평화와 협력&quot;,&quot;경제 협력과 평화 체제 구축을 논의하였다.&quot;),
F(&quot;통일 과제&quot;,&quot;현재&quot;,&quot;평화 정착과 교류&quot;,&quot;군사적 긴장 완화, 상호 신뢰, 지속적 교류가 필요하다.&quot;)
])]}];
function S(id,title,facts){return{id,title,facts}}function F(time,place,key,note){return[time,place,key,note]}
const app=document.querySelector(&quot;#app&quot;),toast=document.querySelector(&quot;#toast&quot;);
const state={view:&quot;home&quot;,unitId:Number(localStorage.getItem(&quot;h2:lastUnit&quot;))||1,subId:Number(localStorage.getItem(&quot;h2:lastSub&quot;))||1,card:0,hint:false,quiz:null};
const store={get wrong(){return JSON.parse(localStorage.getItem(&quot;h2:wrong&quot;)||&quot;[]&quot;)},set wrong(v){localStorage.setItem(&quot;h2:wrong&quot;,JSON.stringify(v))},get records(){return JSON.parse(localStorage.getItem(&quot;h2:records&quot;)||&quot;{}&quot;)},set records(v){localStorage.setItem(&quot;h2:records&quot;,JSON.stringify(v))}};
function unit(){return UNITS.find(u=&gt;u.id===state.unitId)||UNITS[0]}function sub(){return unit().subs.find(s=&gt;s.id===state.subId)||unit().subs[0]}function esc(s){return String(s).replace(/[&amp;&lt;&gt;&quot;']/g,m=&gt;({'&amp;':'&amp;amp;','&lt;':'&amp;lt;','&gt;':'&amp;gt;','&quot;':'&amp;quot;',&quot;'&quot;:'&amp;#039;'}[m]))}function shuffle(a){return[...a].sort(()=&gt;Math.random()-.5)}
function go(v){stopTimer();state.view=v;if(v!==&quot;quiz&quot;)state.quiz=null;render()}function setUnit(id){state.unitId=Number(id);state.subId=unit().subs[0].id;state.card=0;state.hint=false;localStorage.setItem(&quot;h2:lastUnit&quot;,state.unitId);localStorage.setItem(&quot;h2:lastSub&quot;,state.subId)}function setSub(id){state.subId=id;state.card=0;state.hint=false;localStorage.setItem(&quot;h2:lastSub&quot;,state.subId)}
function pageHead(title,desc,back=&quot;home&quot;){return`&lt;div class=&quot;head&quot;&gt;&lt;button class=&quot;back&quot; data-go=&quot;${back}&quot;&gt;←&lt;/button&gt;&lt;div&gt;&lt;span class=&quot;eyebrow&quot;&gt;History ②&lt;/span&gt;&lt;h2&gt;${esc(title)}&lt;/h2&gt;&lt;p class=&quot;muted&quot;&gt;${esc(desc)}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;`}
function showToast(msg){toast.textContent=msg;toast.classList.add(&quot;show&quot;);clearTimeout(showToast.t);showToast.t=setTimeout(()=&gt;toast.classList.remove(&quot;show&quot;),1800)}
function render(){document.querySelectorAll(&quot;.bottom button&quot;).forEach(b=&gt;b.classList.toggle(&quot;active&quot;,b.dataset.go===state.view));({home:renderHome,subunits:renderSubunits,memory:renderMemory,quiz:()=&gt;state.quiz?renderQuestion():renderQuizStart(),stats:renderStats}[state.view]||renderHome)()}
function renderHome(){const best=Math.max(0,...Object.values(store.records).map(r=&gt;r.best||0));const subCount=UNITS.reduce((n,u)=&gt;n+u.subs.length,0);app.innerHTML=`&lt;section class=&quot;hero&quot;&gt;&lt;span class=&quot;eyebrow&quot;&gt;History memory lab&lt;/span&gt;&lt;h1&gt;한국사의 흐름을&lt;br&gt;카드로 정리하다.&lt;/h1&gt;&lt;p class=&quot;muted&quot;&gt;역사2 요점정리를 대단원과 소단원으로 나누어 코넬형 암기카드와 20문항 실전 퀴즈로 학습합니다.&lt;/p&gt;&lt;/section&gt;&lt;div class=&quot;summary&quot;&gt;&lt;div&gt;&lt;strong&gt;${UNITS.length}&lt;/strong&gt;&lt;span&gt;대단원&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${subCount}&lt;/strong&gt;&lt;span&gt;소단원&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;${store.wrong.length}&lt;/strong&gt;&lt;span&gt;남은 오답&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section-title&quot;&gt;&lt;h2&gt;대단원 선택&lt;/h2&gt;&lt;p&gt;최고 기록 ${best}점&lt;/p&gt;&lt;/div&gt;&lt;section class=&quot;grid&quot;&gt;${UNITS.map(u=&gt;`&lt;article class=&quot;unit&quot; style=&quot;--unit:${u.color}&quot;&gt;&lt;span class=&quot;num&quot;&gt;${u.id}&lt;/span&gt;&lt;h3&gt;${esc(u.title)}&lt;/h3&gt;&lt;p&gt;${esc(u.short)} · 소단원 ${u.subs.length}개&lt;/p&gt;&lt;div class=&quot;actions&quot;&gt;&lt;button class=&quot;pill primary&quot; data-unit=&quot;${u.id}&quot; data-open-sub=&quot;1&quot;&gt;소단원 선택&lt;/button&gt;&lt;button class=&quot;pill&quot; data-unit=&quot;${u.id}&quot; data-quick-quiz=&quot;1&quot;&gt;바로 시험&lt;/button&gt;&lt;/div&gt;&lt;/article&gt;`).join(&quot;&quot;)}&lt;/section&gt;`}
function renderSubunits(){const u=unit();app.innerHTML=`${pageHead(`${u.id}단원 소단원 선택`,u.title)}&lt;section class=&quot;grid&quot; style=&quot;--unit:${u.color}&quot;&gt;${u.subs.map(s=&gt;`&lt;article class=&quot;sub ${s.id===state.subId?&quot;selected&quot;:&quot;&quot;}&quot;&gt;&lt;strong&gt;${esc(s.id)}. ${esc(s.title)}&lt;/strong&gt;&lt;span&gt;암기 카드 ${s.facts.length}개 · 시험 20문항&lt;/span&gt;&lt;div class=&quot;actions&quot;&gt;&lt;button class=&quot;pill primary&quot; data-sub=&quot;${s.id}&quot; data-open-memory=&quot;1&quot;&gt;암기&lt;/button&gt;&lt;button class=&quot;pill&quot; data-sub=&quot;${s.id}&quot; data-open-quiz=&quot;1&quot;&gt;시험&lt;/button&gt;&lt;/div&gt;&lt;/article&gt;`).join(&quot;&quot;)}&lt;/section&gt;`}
function renderMemory(){const u=unit(),s=sub(),f=s.facts[state.card%s.facts.length],p=((state.card+1)/s.facts.length)*100;app.innerHTML=`${pageHead(`${s.id} 암기`,s.title,&quot;subunits&quot;)}&lt;div class=&quot;seg&quot;&gt;&lt;button class=&quot;active&quot;&gt;코넬노트&lt;/button&gt;&lt;button data-go=&quot;quiz&quot;&gt;바로 시험&lt;/button&gt;&lt;/div&gt;&lt;div style=&quot;--unit:${u.color}&quot;&gt;&lt;div class=&quot;section-title&quot;&gt;&lt;h3&gt;${state.card+1} / ${s.facts.length}&lt;/h3&gt;&lt;p&gt;핵심어를 떠올린 뒤 풀이를 확인하세요&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;progress&quot; style=&quot;--progress:${p}%;--unit:${u.color}&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;article class=&quot;cornell&quot;&gt;&lt;aside class=&quot;cue&quot;&gt;&lt;span class=&quot;label&quot;&gt;CUE · 단서&lt;/span&gt;&lt;div class=&quot;cue-time&quot;&gt;${esc(f[0])}&lt;/div&gt;&lt;div class=&quot;cue-place&quot;&gt;${esc(f[1])}&lt;/div&gt;&lt;/aside&gt;&lt;section class=&quot;note&quot;&gt;&lt;span class=&quot;label&quot;&gt;NOTE · 핵심어&lt;/span&gt;&lt;h3&gt;${esc(f[2])}&lt;/h3&gt;${state.hint?`&lt;div class=&quot;hint&quot;&gt;${esc(f[3])}&lt;/div&gt;`:`&lt;div class=&quot;hint hidden&quot;&gt;설명을 떠올린 뒤 힌트를 확인하세요.&lt;/div&gt;`}&lt;button class=&quot;primary&quot; id=&quot;hintBtn&quot;&gt;${state.hint?&quot;힌트 감추기&quot;:&quot;힌트 보기&quot;}&lt;/button&gt;&lt;/section&gt;&lt;/article&gt;&lt;div class=&quot;cardnav&quot;&gt;&lt;button id=&quot;prev&quot;&gt;←&lt;/button&gt;&lt;button id=&quot;random&quot;&gt;무작위 카드&lt;/button&gt;&lt;button id=&quot;next&quot;&gt;→&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;`}
function renderQuizStart(){const u=unit(),s=sub();app.innerHTML=`${pageHead(&quot;시험 도전&quot;,`${s.id}. ${s.title}`,&quot;subunits&quot;)}&lt;label class=&quot;label&quot;&gt;대단원&lt;/label&gt;&lt;select id=&quot;quizUnit&quot; class=&quot;primary&quot; style=&quot;background:white;color:var(--deep);border:1px solid var(--line);margin-bottom:12px&quot;&gt;${UNITS.map(u=&gt;`&lt;option value=&quot;${u.id}&quot; ${u.id===state.unitId?&quot;selected&quot;:&quot;&quot;}&gt;${u.id}. ${esc(u.title)}&lt;/option&gt;`).join(&quot;&quot;)}&lt;/select&gt;&lt;label class=&quot;label&quot;&gt;소단원&lt;/label&gt;&lt;select id=&quot;quizSub&quot; class=&quot;primary&quot; style=&quot;background:white;color:var(--deep);border:1px solid var(--line);margin-bottom:14px&quot;&gt;${u.subs.map(x=&gt;`&lt;option value=&quot;${x.id}&quot; ${x.id===state.subId?&quot;selected&quot;:&quot;&quot;}&gt;${x.id}. ${esc(x.title)}&lt;/option&gt;`).join(&quot;&quot;)}&lt;/select&gt;&lt;section class=&quot;quiz-start&quot; style=&quot;--unit:${u.color}&quot;&gt;&lt;span class=&quot;eyebrow&quot; style=&quot;color:#efb398&quot;&gt;${s.id} 소단원&lt;/span&gt;&lt;h2&gt;${esc(s.title)}&lt;/h2&gt;&lt;p&gt;각 문제마다 15초 안에 정답을 고릅니다. 정답 확인 후 바로 풀이가 표시됩니다.&lt;/p&gt;&lt;div class=&quot;rules&quot;&gt;&lt;div&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;span&gt;문항&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;15초&lt;/strong&gt;&lt;span&gt;문제당&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;4지&lt;/strong&gt;&lt;span&gt;선다형&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;button class=&quot;primary&quot; id=&quot;startQuiz&quot; style=&quot;background:${u.color}&quot;&gt;퀴즈 시작&lt;/button&gt;&lt;/section&gt;`}
function makeQuestions(){const s=sub(),all=UNITS.flatMap(u=&gt;u.subs.flatMap(x=&gt;x.facts));let base=[];s.facts.forEach((f,i)=&gt;{base.push({factIndex:i,question:`다음 설명에 해당하는 핵심어는?\n${f[3]}`,answer:f[2],choices:choices(f[2],all.map(x=&gt;x[2])),explain:`${f[2]}: ${f[3]}`});base.push({factIndex:i,question:`'${f[2]}'에 대한 설명으로 옳은 것은?`,answer:f[3],choices:choices(f[3],all.map(x=&gt;x[3])),explain:`${f[0]} · ${f[1]} · ${f[2]}`})});let out=[];while(out.length&lt;20)out.push(...shuffle(base));return shuffle(out.slice(0,20))}
function choices(ans,pool){return shuffle([ans,...shuffle(pool.filter(x=&gt;x!==ans)).slice(0,3)])}
function startQuiz(){state.quiz={questions:makeQuestions(),idx:0,score:0,answers:[],seconds:15,locked:false};state.view=&quot;quiz&quot;;render();startTimer()}
function renderQuestion(){const u=unit(),s=sub(),qz=state.quiz,q=qz.questions[qz.idx],p=((qz.idx+1)/qz.questions.length)*100;app.innerHTML=`&lt;div style=&quot;--unit:${u.color}&quot;&gt;&lt;div class=&quot;quiz-top&quot;&gt;&lt;div&gt;&lt;span class=&quot;eyebrow&quot;&gt;${s.id} 소단원 시험&lt;/span&gt;&lt;h3&gt;${qz.idx+1} / ${qz.questions.length}&lt;/h3&gt;&lt;/div&gt;&lt;div id=&quot;timer&quot; class=&quot;timer&quot;&gt;${qz.seconds}&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;progress&quot; style=&quot;--progress:${p}%;--unit:${u.color}&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;article class=&quot;qcard&quot;&gt;&lt;span class=&quot;meta&quot;&gt;객관식 4지 선다&lt;/span&gt;&lt;h2&gt;${esc(q.question).replace(&quot;\\n&quot;,&quot;&lt;br&gt;&quot;)}&lt;/h2&gt;&lt;div class=&quot;choices&quot;&gt;${q.choices.map((c,i)=&gt;`&lt;button class=&quot;choice&quot; data-choice=&quot;${esc(c)}&quot;&gt;&lt;b&gt;${i+1}&lt;/b&gt;&lt;span&gt;${esc(c)}&lt;/span&gt;&lt;/button&gt;`).join(&quot;&quot;)}&lt;/div&gt;&lt;div id=&quot;answerArea&quot;&gt;&lt;/div&gt;&lt;/article&gt;&lt;/div&gt;`}
function answer(selected,timed=false){const qz=state.quiz;if(!qz||qz.locked)return;qz.locked=true;stopTimer();const q=qz.questions[qz.idx],ok=selected===q.answer;if(ok)qz.score++;qz.answers.push({...q,selected:selected||&quot;시간 초과&quot;,correct:ok});document.querySelectorAll(&quot;.choice&quot;).forEach(btn=&gt;{btn.disabled=true;if(btn.dataset.choice===q.answer)btn.classList.add(&quot;correct&quot;);else if(btn.dataset.choice===selected)btn.classList.add(&quot;wrong&quot;)});document.querySelector(&quot;#answerArea&quot;).innerHTML=`&lt;div class=&quot;explain&quot;&gt;&lt;b&gt;${ok?&quot;정답&quot;:&quot;오답&quot;}&lt;/b&gt;${timed?&quot; · 시간 초과&quot;:&quot;&quot;}&lt;br&gt;정답: ${esc(q.answer)}&lt;br&gt;${esc(q.explain)}&lt;br&gt;&lt;button class=&quot;primary&quot; id=&quot;nextQ&quot; style=&quot;margin-top:10px&quot;&gt;${qz.idx===qz.questions.length-1?&quot;결과 보기&quot;:&quot;다음 문제&quot;}&lt;/button&gt;&lt;/div&gt;`}
function nextQ(){state.quiz.idx++;state.quiz.locked=false;state.quiz.seconds=15;if(state.quiz.idx&gt;=state.quiz.questions.length)return finishQuiz();render();startTimer()}
function finishQuiz(){stopTimer();const u=unit(),s=sub(),qz=state.quiz,score=qz.score,total=qz.questions.length,percent=Math.round(score/total*100),key=`${u.id}:${s.id}`,records=store.records;records[key]={best:Math.max(records[key]?.best||0,score),last:score,total,date:new Date().toLocaleDateString()};store.records=records;store.wrong=qz.answers.filter(a=&gt;!a.correct).map(a=&gt;({unitId:u.id,subId:s.id,factIndex:a.factIndex}));app.innerHTML=`${pageHead(&quot;시험 결과&quot;,`${s.id}. ${s.title}`,&quot;subunits&quot;)}&lt;section class=&quot;result&quot; style=&quot;--unit:${u.color};--score:${percent}%&quot;&gt;&lt;div class=&quot;score&quot;&gt;${percent}&lt;/div&gt;&lt;h2&gt;${score} / ${total}&lt;/h2&gt;&lt;p class=&quot;muted&quot;&gt;${score&gt;=16?&quot;흐름이 잘 잡혔습니다.&quot;:&quot;오답 카드를 다시 보고 한 번 더 도전하세요.&quot;}&lt;/p&gt;&lt;div class=&quot;actions&quot;&gt;&lt;button class=&quot;primary&quot; id=&quot;shareBtn&quot; style=&quot;background:${u.color}&quot;&gt;결과 전송&lt;/button&gt;&lt;button class=&quot;secondary&quot; id=&quot;retryBtn&quot;&gt;다시 풀기&lt;/button&gt;&lt;/div&gt;&lt;/section&gt;`;state.quiz=null}
let timer=null;function startTimer(){stopTimer();timer=setInterval(()=&gt;{if(!state.quiz||state.quiz.locked)return;state.quiz.seconds--;const t=document.querySelector(&quot;#timer&quot;);if(t){t.textContent=state.quiz.seconds;t.classList.toggle(&quot;danger&quot;,state.quiz.seconds&lt;=5)}if(state.quiz.seconds&lt;=0)answer(null,true)},1000)}function stopTimer(){clearInterval(timer);timer=null}
function renderStats(){const rows=Object.entries(store.records);app.innerHTML=`${pageHead(&quot;학습 기록&quot;,&quot;소단원별 최고 점수와 최근 기록&quot;)}${rows.length?`&lt;div class=&quot;grid&quot;&gt;${rows.map(([k,r])=&gt;`&lt;div class=&quot;sub&quot;&gt;&lt;strong&gt;${esc(k)} 소단원&lt;/strong&gt;&lt;span&gt;최고 ${r.best}/${r.total} · 최근 ${r.last}/${r.total} · ${r.date}&lt;/span&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`:`&lt;div class=&quot;sub&quot;&gt;&lt;strong&gt;아직 기록이 없습니다.&lt;/strong&gt;&lt;span&gt;시험을 풀면 기록이 저장됩니다.&lt;/span&gt;&lt;/div&gt;`}`}
function shareResult(){const rec=Object.values(store.records).at(-1);const text=rec?`YM 역사2 결과: ${rec.last}/${rec.total}점`:&quot;YM 역사2 학습 결과&quot;;if(navigator.share)navigator.share({title:&quot;YM 역사2&quot;,text});else{navigator.clipboard&amp;&amp;navigator.clipboard.writeText(text);showToast(&quot;결과가 복사되었습니다.&quot;)}}
document.addEventListener(&quot;click&quot;,e=&gt;{const b=e.target.closest(&quot;button&quot;);if(!b)return;if(b.dataset.go){go(b.dataset.go);return}if(b.dataset.unit){setUnit(b.dataset.unit);if(b.dataset.openSub)go(&quot;subunits&quot;);if(b.dataset.quickQuiz)go(&quot;quiz&quot;);return}if(b.dataset.sub){setSub(b.dataset.sub);if(b.dataset.openMemory)go(&quot;memory&quot;);if(b.dataset.openQuiz)go(&quot;quiz&quot;);return}if(b.id===&quot;hintBtn&quot;){state.hint=!state.hint;renderMemory()}if(b.id===&quot;prev&quot;){state.card=(state.card-1+sub().facts.length)%sub().facts.length;state.hint=false;renderMemory()}if(b.id===&quot;next&quot;){state.card=(state.card+1)%sub().facts.length;state.hint=false;renderMemory()}if(b.id===&quot;random&quot;){state.card=Math.floor(Math.random()*sub().facts.length);state.hint=false;renderMemory()}if(b.id===&quot;startQuiz&quot;)startQuiz();if(b.classList.contains(&quot;choice&quot;))answer(b.dataset.choice);if(b.id===&quot;nextQ&quot;)nextQ();if(b.id===&quot;retryBtn&quot;)startQuiz();if(b.id===&quot;shareBtn&quot;)shareResult()});
document.addEventListener(&quot;change&quot;,e=&gt;{if(e.target.id===&quot;quizUnit&quot;){setUnit(e.target.value);go(&quot;quiz&quot;)}if(e.target.id===&quot;quizSub&quot;){setSub(e.target.value);go(&quot;quiz&quot;)}});
document.querySelector(&quot;#recordBtn&quot;).onclick=()=&gt;go(&quot;stats&quot;);render();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>중등 기타과목/중등역사</category>
      <category>역사2</category>
      <category>중등</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/391</guid>
      <comments>https://ymedu.tistory.com/391#entry391comment</comments>
      <pubDate>Tue, 30 Jun 2026 17:20:20 +0900</pubDate>
    </item>
    <item>
      <title>경신고 기말 한국사 대비</title>
      <link>https://ymedu.tistory.com/390</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;한국사1 기말고사 카드 퀴즈&lt;/title&gt;
&lt;style&gt;
  :root{
    --bg1:#6C5CE7; --bg2:#00B894; --bg3:#0984E3;
    --accent:#FDCB6E; --accent2:#FF7675; --accent3:#74B9FF;
  }
  *{box-sizing:border-box;}
  body{
    margin:0; font-family:'Malgun Gothic','맑은 고딕',sans-serif;
    background:linear-gradient(135deg,#c0392b 0%, #8e44ad 50%, #2c3e50 100%);
    min-height:100vh; display:flex; flex-direction:column; align-items:center;
    padding:24px 12px 60px;
  }
  h1{color:#fff; font-size:22px; margin:6px 0 2px; text-align:center; text-shadow:0 2px 6px rgba(0,0,0,.25);}
  .sub{color:#eef; font-size:13px; margin-bottom:16px; opacity:.9;}
  .progress-wrap{width:100%; max-width:480px; margin-bottom:14px;}
  .progress-bar{height:8px; background:rgba(255,255,255,.3); border-radius:8px; overflow:hidden;}
  .progress-fill{height:100%; background:linear-gradient(90deg,#FDCB6E,#FF7675); width:4%; transition:width .3s;}
  .progress-text{color:#fff; font-size:12px; text-align:center; margin-top:6px;}

  .scene{ width:100%; max-width:480px; height:520px; perspective:1600px; }
  .card{
    width:100%; height:100%; position:relative; transform-style:preserve-3d;
    transition:transform .6s cubic-bezier(.4,.2,.2,1); cursor:pointer;
  }
  .card.flipped{ transform:rotateY(180deg); }
  .face{
    position:absolute; inset:0; backface-visibility:hidden;
    border-radius:20px; padding:26px 24px; overflow-y:auto;
    box-shadow:0 14px 30px rgba(0,0,0,.3);
    display:flex; flex-direction:column;
  }
  .front{ background:linear-gradient(160deg,#2c2c54,#40407a); color:#fff; }
  .back{ background:linear-gradient(160deg,#1e3a5f,#16213e); color:#fff; transform:rotateY(180deg); }

  .badge{
    display:inline-block; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:bold;
    background:var(--accent); color:#2D3436; margin-bottom:10px; width:fit-content;
  }
  .badge.area-open{ background:#FF7675; color:#fff; }
  .badge.area-emp{ background:#00CEC9; color:#1b2b34; }
  .badge.area-move{ background:#74B9FF; color:#1b2b34; }
  .badge.area-essay{ background:#FDCB6E; color:#2D3436; }

  .qnum{ font-size:14px; opacity:.8; margin-bottom:6px; }
  .qtext{ font-size:15.5px; line-height:1.6; flex:1; }
  .qtext p{ margin:6px 0; }
  .src{
    background:rgba(255,255,255,.08); border-left:4px solid #FDCB6E; border-radius:8px;
    padding:8px 12px; margin:8px 0; font-size:13.5px; line-height:1.6; color:#dfe6e9;
  }
  .diagram{ background:rgba(255,255,255,.06); border-radius:12px; padding:6px; margin:8px 0; }
  .diagram svg{ width:100%; height:auto; display:block; }
  .choices{ margin-top:10px; font-size:14px; line-height:1.9; color:#dfe6e9;}
  .hint{ margin-top:auto; font-size:12px; color:#b2bec3; text-align:center; padding-top:10px;}

  .answer-line{
    font-size:18px; font-weight:bold; color:#FDCB6E; margin-bottom:10px;
    padding:8px 12px; background:rgba(255,255,255,.08); border-radius:10px;
  }
  .explain{ font-size:14.5px; line-height:1.7; color:#ecf0f1; flex:1; }
  .explain b{ color:#74B9FF; }
  .tip{
    margin-top:10px; font-size:13px; background:rgba(253,203,110,.15);
    border-left:4px solid #FDCB6E; padding:8px 10px; border-radius:6px; color:#ffeaa7;
  }

  .controls{ display:flex; gap:10px; margin-top:18px; align-items:center; }
  button{
    border:none; border-radius:12px; padding:12px 18px; font-size:14px; font-weight:bold;
    cursor:pointer; transition:transform .15s, box-shadow .15s; box-shadow:0 4px 10px rgba(0,0,0,.2);
  }
  button:active{ transform:scale(.95); }
  .btn-nav{ background:#fff; color:#2D3436; }
  .btn-flip{ background:linear-gradient(90deg,#FF7675,#FDCB6E); color:#2D3436; padding:12px 26px;}
  .jump-row{
    display:flex; flex-wrap:wrap; gap:6px; max-width:480px; justify-content:center; margin-top:18px;
  }
  .jump-btn{
    width:34px; height:34px; border-radius:50%; font-size:11px; padding:0;
    background:rgba(255,255,255,.25); color:#fff; border:1px solid rgba(255,255,255,.4);
  }
  .jump-btn.current{ background:#FDCB6E; color:#2D3436; border-color:#FDCB6E; transform:scale(1.15);}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h1&gt;  한국사1 기말고사 카드 퀴즈&lt;/h1&gt;
&lt;div class=&quot;sub&quot;&gt;카드를 클릭하면 뒤집혀서 정답과 해설을 볼 수 있어요&lt;/div&gt;

&lt;div class=&quot;progress-wrap&quot;&gt;
  &lt;div class=&quot;progress-bar&quot;&gt;&lt;div class=&quot;progress-fill&quot; id=&quot;progressFill&quot;&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;div class=&quot;progress-text&quot; id=&quot;progressText&quot;&gt;1 / 26&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;scene&quot;&gt;
  &lt;div class=&quot;card&quot; id=&quot;card&quot;&gt;
    &lt;div class=&quot;face front&quot; id=&quot;frontFace&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;face back&quot; id=&quot;backFace&quot;&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;controls&quot;&gt;
  &lt;button class=&quot;btn-nav&quot; id=&quot;prevBtn&quot;&gt;◀ 이전&lt;/button&gt;
  &lt;button class=&quot;btn-flip&quot; id=&quot;flipBtn&quot;&gt;  뒤집기&lt;/button&gt;
  &lt;button class=&quot;btn-nav&quot; id=&quot;nextBtn&quot;&gt;다음 ▶&lt;/button&gt;
&lt;/div&gt;

&lt;div class=&quot;jump-row&quot; id=&quot;jumpRow&quot;&gt;&lt;/div&gt;

&lt;script&gt;
const AREA = {
  open:  { label: &quot;개항·불평등조약&quot;, cls: &quot;area-open&quot; },
  emp:   { label: &quot;독립협회·대한제국·을사조약&quot;, cls: &quot;area-emp&quot; },
  move:  { label: &quot;애국계몽·국권수호운동&quot;, cls: &quot;area-move&quot; },
  essay: { label: &quot;서술형&quot;, cls: &quot;area-essay&quot; }
};

const cards = [
{no:&quot;1&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;다음 사료에 대한 설명으로 옳은 것만을 보기에서 모두 고른 것은? [3.6점]&lt;/p&gt;`,
 src:`제1관 조선과 미국은 영원히 화평하고 우애 있게 지낸다. 조약 상대국이 어떤 불공평하고 경멸하는 일이 있을 때에 통지하면 서로 도와준다.&lt;br&gt;제14관 조선이 어떠한 은혜로운 정사와 은혜로운 법 및 이익을 다른 나라 혹은 그 상인에게 베풀 경우 …(중략)… 미국 관원과 백성이 일체 균점하는 것을 승인한다.`,
 choices:`ㄱ. 운요호 사건의 결과 체결되었다.&lt;br&gt;ㄴ. 조선이 서양과 맺은 최초의 조약이다.&lt;br&gt;ㄷ. 배상금을 포함한 불평등 조약이다.&lt;br&gt;ㄹ. 거중 조정과 최혜국 대우 조항 등을 포함하였다.`,
 answer:&quot;④ ㄴ, ㄹ&quot;,
 explain:`사료는 조미수호통상조약(1882). 거중조정(제1관)과 최혜국대우(제14관)가 핵심 조항이다. ㄱ은 강화도조약(운요호 사건의 결과), ㄷ(배상금)은 제물포조약 설명이므로 틀림. ㄴ(서양과 맺은 최초의 조약), ㄹ(거중조정·최혜국대우)이 맞음.`,
 tip:&quot;강화도조약(해안측량권·영사재판권) vs 조미수호통상조약(거중조정·최혜국대우·관세)을 짝지어 구분하자.&quot;},

{no:&quot;2&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;다음 사건들을 순서대로 바르게 나열한 것은? [3.6점]&lt;/p&gt;`,
 src:`(가) 무장한 미국 상선 제너럴셔먼호가 대동강을 거슬러 올라와 조선에 요구했다.&lt;br&gt;(나) 한성근 부대는 문수산성에서 프랑스군과 전투를 벌였고, 양헌수 부대는 정족산성에서 프랑스군을 물리쳤다.&lt;br&gt;(다) 초지진 일대에 상륙한 미군은 덕진진을 점령하고 이어 광성보를 공격했다.&lt;br&gt;(라) 흥선대원군은 프랑스 선교사들을 비롯한 천주교 신자들을 처형했다.`,
 choices:`① (가)→(나)→(다)→(라)&lt;br&gt;② (가)→(다)→(나)→(라)&lt;br&gt;③ (나)→(가)→(다)→(라)&lt;br&gt;④ (라)→(가)→(나)→(다)&lt;br&gt;⑤ (라)→(가)→(다)→(나)`,
 answer:&quot;④ (라)→(가)→(나)→(다)&quot;,
 explain:`병인박해(1866초, (라))→제너럴셔먼호 사건(1866.7, (가))→병인양요(1866.9, (나))→신미양요(1871, (다)).`,
 tip:&quot;병인박해→병인양요(프랑스 보복), 제너럴셔먼호 사건→신미양요(미국 보복)의 인과관계로 암기.&quot;},

{no:&quot;3&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;다음 법령이 발표된 시기를 연표에서 옳게 고른 것은? [3.3점]&lt;/p&gt;`,
 src:`제3조 대한국 대황제는 무한한 군주권을 누린다.&lt;br&gt;제6조 대한국 대황제는 법률을 제정해 그 반포와 집행을 명하고, 사면·특사·복권을 행한다.`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 70&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;line x1=&quot;20&quot; y1=&quot;35&quot; x2=&quot;300&quot; y2=&quot;35&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
  &lt;g font-size=&quot;9&quot; fill=&quot;#fff&quot;&gt;
   &lt;text x=&quot;10&quot; y=&quot;20&quot;&gt;삼국간섭&lt;/text&gt;&lt;text x=&quot;60&quot; y=&quot;20&quot;&gt;을미사변&lt;/text&gt;&lt;text x=&quot;115&quot; y=&quot;20&quot;&gt;아관파천&lt;/text&gt;&lt;text x=&quot;165&quot; y=&quot;20&quot;&gt;고종황제즉위&lt;/text&gt;&lt;text x=&quot;235&quot; y=&quot;20&quot;&gt;독립협회해산&lt;/text&gt;&lt;text x=&quot;285&quot; y=&quot;20&quot;&gt;러일전쟁&lt;/text&gt;
  &lt;/g&gt;
  &lt;g font-size=&quot;10&quot; fill=&quot;#FDCB6E&quot;&gt;
   &lt;text x=&quot;30&quot; y=&quot;50&quot;&gt;(가)&lt;/text&gt;&lt;text x=&quot;85&quot; y=&quot;50&quot;&gt;(나)&lt;/text&gt;&lt;text x=&quot;140&quot; y=&quot;50&quot;&gt;(다)&lt;/text&gt;&lt;text x=&quot;200&quot; y=&quot;50&quot;&gt;(라)&lt;/text&gt;&lt;text x=&quot;260&quot; y=&quot;50&quot;&gt;(마)&lt;/text&gt;
  &lt;/g&gt;
 &lt;/svg&gt;`,
 choices:`① (가)  ② (나)  ③ (다)  ④ (라)  ⑤ (마)`,
 answer:&quot;⑤ (마)&quot;,
 explain:`법령은 대한국국제(1899). 독립협회 해산(1898.12) 이후, 러일전쟁(1904) 이전 시기인 (마)에 해당한다.`,
 tip:&quot;대한국국제(1899)=대한제국 광무개혁의 핵심 법령. 발표 시기를 연표 흐름 속에서 정확히 짚어두자.&quot;},

{no:&quot;4&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;(가) 세력에 대한 설명으로 옳은 것만을 보기에서 모두 고른 것은? [3.4점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 130&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  &lt;rect x=&quot;80&quot; y=&quot;10&quot; width=&quot;160&quot; height=&quot;26&quot; rx=&quot;6&quot; fill=&quot;#34495e&quot;/&gt;&lt;text x=&quot;90&quot; y=&quot;28&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;개화사상의 선구자: 박규수, 오경석, 유홍기&lt;/text&gt;
  &lt;line x1=&quot;160&quot; y1=&quot;36&quot; x2=&quot;160&quot; y2=&quot;55&quot; stroke=&quot;#dfe6e9&quot;/&gt;
  &lt;rect x=&quot;110&quot; y=&quot;55&quot; width=&quot;100&quot; height=&quot;24&quot; rx=&quot;6&quot; fill=&quot;#636e72&quot;/&gt;&lt;text x=&quot;135&quot; y=&quot;71&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;개화파&lt;/text&gt;
  &lt;line x1=&quot;160&quot; y1=&quot;79&quot; x2=&quot;80&quot; y2=&quot;95&quot; stroke=&quot;#dfe6e9&quot;/&gt;
  &lt;line x1=&quot;160&quot; y1=&quot;79&quot; x2=&quot;250&quot; y2=&quot;95&quot; stroke=&quot;#dfe6e9&quot;/&gt;
  &lt;rect x=&quot;20&quot; y=&quot;95&quot; width=&quot;130&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;#74B9FF&quot;/&gt;&lt;text x=&quot;30&quot; y=&quot;115&quot; fill=&quot;#1b2b34&quot; font-size=&quot;10&quot;&gt;(가) 김홍집,어윤중,김윤식&lt;/text&gt;
  &lt;rect x=&quot;170&quot; y=&quot;95&quot; width=&quot;135&quot; height=&quot;30&quot; rx=&quot;6&quot; fill=&quot;#FF7675&quot;/&gt;&lt;text x=&quot;178&quot; y=&quot;115&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;급진개화파 김옥균,박영효 등&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. 조선의 자주성을 지키기 위해 청과의 우호 관계를 중시하였다.&lt;br&gt;ㄴ. 성리학적 질서를 유지하면서 서양의 과학 기술을 수용하고자 했다.&lt;br&gt;ㄷ. 메이지 유신을 본받아 서양의 기술뿐만 아니라 사상과 제도까지 수용하고자 주장했다.&lt;br&gt;ㄹ. 개화 정책 추진에 필요한 자금 마련을 위해 일본에 차관 도입을 시도했다.`,
 answer:&quot;① ㄱ, ㄴ&quot;,
 explain:`(가)=온건개화파: 청과의 우호관계 중시(동도서기론, ㄱ), 성리학적 질서 유지하며 서양 과학기술만 수용(ㄴ). ㄷ·ㄹ은 급진개화파의 특징이므로 틀림.`,
 tip:&quot;동도서기(온건개화파) vs 문명개화론(급진개화파)의 차이를 표로 비교 정리하자.&quot;},

{no:&quot;5&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;개혁 정강이 발표된 사건의 배경으로 옳은 것을 보기에서 모두 고른 것은? [3.1점]&lt;/p&gt;`,
 src:`2. 문벌을 폐지해 인민 평등의 권리를 제정하고, 사람에게 관직을 택하게 하고 관직으로써 사람을 택하지 말 것.&lt;br&gt;3. 전국적으로 지조법을 개혁해 관리의 부정을 막고 백성의 어려움을 펴게 하는 동시에 국가재정을 넉넉하게 할 것.`,
 choices:`ㄱ. 영국이 거문도를 불법 점령하였다.&lt;br&gt;ㄴ. 민씨 정권이 친청 정책을 추진하였다.&lt;br&gt;ㄷ. 청과 일본이 톈진 조약을 체결하였다.&lt;br&gt;ㄹ. 청프 전쟁으로 청군 일부가 조선에서 철수하였다.`,
 answer:&quot;④ ㄴ, ㄹ&quot;,
 explain:`갑신정변(1884) 14개조 정강의 배경: 민씨정권의 친청정책 반발(ㄴ), 청프전쟁으로 청군 일부가 베트남 방면으로 철수하여 군사적 공백 발생(ㄹ). 거문도 사건(ㄱ)·톈진조약(ㄷ)은 정변 이후의 결과이므로 배경이 될 수 없다.`,
 tip:&quot;갑신정변의 배경(친청정책 반발+청군 철수)과 결과(거문도 사건, 톈진조약)를 시간순으로 구분하자.&quot;},

{no:&quot;6&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;(가), (나) 사이의 시기에 있었던 사실로 옳은 것은? [3.1점]&lt;/p&gt;`,
 src:`(가) 농민군은 황토현과 황룡촌에서 관군을 격파하고, 기세를 몰아 전주성까지 점령했다.&lt;br&gt;(나) 일본은 무력으로 경복궁을 점령한 후 김홍집 등 개화파 인사들을 중심으로 새로운 내각을 수립했다.`,
 choices:`① 농민군이 백산에서 4대 강령을 발표하였다.&lt;br&gt;② 논산에서 남접과 북접 연합 부대가 만들어졌다.&lt;br&gt;③ 전봉준, 김개남, 손화중 등 주요 지도자가 체포되었다.&lt;br&gt;④ 일본은 아산만에 주둔 중인 청군을 공격해 전쟁을 일으켰다.&lt;br&gt;⑤ 농민군은 자치 조직인 집강소를 세워 폐정 개혁안을 실천해 나갔다.`,
 answer:&quot;⑤&quot;,
 explain:`(가)1차봉기 전주성 점령과 (나)일본의 경복궁 점령(1894.6) 사이는 전주화약 체결 후 집강소 설치 시기이다. 농민군이 자치기구 집강소를 세워 폐정개혁안을 실천한 것이 이 시기의 사실이다.`,
 tip:&quot;동학농민운동 흐름: 1차 봉기→전주화약·집강소→청일전쟁 발발→2차 봉기→우금치 전투 순으로 암기.&quot;},

{no:&quot;7&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;보기를 읽고 A~D에 들어갈 나라로 옳은 것은? [3.2점]&lt;/p&gt;`,
 src:`(가) A이/가 땅을 공략하고자 하면 반드시 조선으로부터 시작할 것이다. …A를 막는 조선의 책략은 무엇인가? 오직 B와/와 친하고 C와/와 맺고 D와/와 연합함으로써 자강을 도모할 뿐이다.&lt;br&gt;(나) D은/는 우리가 본래 모르던 나라입니다. …D은/는 본래 우리와 관계가 없는 나라입니다.`,
 choices:`① 러시아-중국-일본-미국&lt;br&gt;② 러시아-중국-미국-일본&lt;br&gt;③ 러시아-미국-중국-일본&lt;br&gt;④ 일본-리시아-미국-중국&lt;br&gt;⑤ 일본-러시아-중국-미국`,
 answer:&quot;① 러시아-중국-일본-미국&quot;,
 explain:`(가)는 「조선책략」 계열 사료(친중국·결일본·연미국)로 A는 경계 대상인 러시아. (나)는 미국과의 수교 사료로 '본래 관계없는 나라'가 D(미국)를 가리킨다.`,
 tip:&quot;「조선책략」의 친중국·결일본·연미국 구조를 사료 속에서 빠르게 식별하는 연습을 하자.&quot;},

{no:&quot;8&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;(나) 사료에 대한 설명으로 옳은 것은? [3.2점]&lt;/p&gt;`,
 choices:`① 이만손 등 영남 지방 유생들이 만인소를 올렸다.&lt;br&gt;② 최익현은 (나)를 통해 왜양일체론을 주장하였다.&lt;br&gt;③ 영국이 거문도를 불법 점령을 제기로 작성하였다.&lt;br&gt;④ (나)에 대한 반발로 청은 묄렌도르프를 조선에 파견하였다.&lt;br&gt;⑤ 이항로, 기정진 등은 (나)를 작성하여 척화주전론을 주장했다.`,
 answer:&quot;①&quot;,
 explain:`(나)는 조선책략 유포를 계기로 한 미국 수교 권유 사료이다. 이만손 등 영남 유생들이 반발해 영남만인소를 올린 것이 직접적 반응이다.`,
 tip:&quot;영남만인소=조선책략에 대한 위정척사 반발 운동이라는 인과관계를 기억하자.&quot;},

{no:&quot;9&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;다음 조약의 내용과 관계있는 것은? [3.1점]&lt;/p&gt;`,
 src:`제3관 조선국은 5만원을 내어 해를 당한 일본 관리와 하급 직원의 유족 및 부상자에게 지급한다. — 제물포 조약 —`,
 choices:`① 거류지 무역이 이루어졌다.&lt;br&gt;② 일본이 박문국을 설립하였다.&lt;br&gt;③ 일본군의 한성 주둔을 허용하였다.&lt;br&gt;④ 조미 수호 통상 조약이 체결되었다.&lt;br&gt;⑤ 유길준이 조선 중립화론을 주장하였다.`,
 answer:&quot;③&quot;,
 explain:`사료는 제물포조약(1882, 임오군란 처리 결과)이다. 일본 공사관 경비 명목으로 일본군의 한성 주둔을 허용한 것이 핵심 조항이다.`,
 tip:&quot;제물포조약=배상금 지급+일본군 한성 주둔 허용. 임오군란의 결과로 정확히 짝지어 암기.&quot;},

{no:&quot;10&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;㉠단체에 대한 설명으로 옳은 것만을 보기에서 모두 고른 것은? [3.5점]&lt;/p&gt;`,
 src:`서재필과 정부 내 개혁 세력은 조선의 자주독립을 알리기 위해 ㉠을/를 창립했다. ㉠은/는 독립문 건립 기금을 내면 누구나 회원이 될 수 있도록 해 학생, 노동자, 상인 등 다양한 계층의 참여를 이끌어냈다.`,
 choices:`ㄱ. 미국의 절영도 조차 요구를 철회시켰다.&lt;br&gt;ㄴ. 일본의 군사 교관과 재정 고문을 철수시켰다.&lt;br&gt;ㄷ. 만민 공동회를 개최하여 러시아의 침략행위를 비판하였다.&lt;br&gt;ㄹ. 중추원을 의회식으로 개편하는 안을 합의하고 헌의 6조를 채택했다.`,
 answer:&quot;⑤ ㄷ, ㄹ&quot;,
 explain:`㉠=독립협회. 만민공동회를 개최하여 러시아의 절영도 조차 요구 등 침략행위를 비판(ㄷ)하였고, 헌의6조를 채택(ㄹ)하였다. (참고: 절영도는 러시아가 요구한 것이므로 ㄱ의 '미국'은 오류, ㄴ의 '일본'도 실제로는 러시아 군사·재정 고문 철수가 맞음)`,
 tip:&quot;독립협회의 활동(독립문 건립, 만민공동회, 헌의6조)을 사건 순서로 암기해두자.&quot;},

{no:&quot;11&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;(가)이/가 실시한 개혁에 대한 설명으로 옳지 &lt;u&gt;않은&lt;/u&gt; 것은? [3.5점]&lt;/p&gt;`,
 src:`고종의 환궁을 요구하는 국내외의 여론이 높아지자, 고종은 경운궁으로 환궁했다. 이 과정에서 고종이 황제로 즉위해야 한다는 상소가 제기되었다. 이를 받아들인 고종은 연호를 '광무'로 정하고, 환구단에서 황제 즉위식을 열어 (가)을/를 선포했다.`,
 choices:`① 구본신참을 기본 방향으로 점진적인 개혁을 추진하였다.&lt;br&gt;② 원수부를 설치하여 모든 군사권을 황제에게 집중하였다.&lt;br&gt;③ 중앙 군대인 친위대를 강화하고 지방 군대인 진위대 병력을 늘렸다.&lt;br&gt;④ 청일 전쟁이 일어나 열강의 세력 균형이 깨지면서 개혁이 중단되었다.&lt;br&gt;⑤ 토지 소유자에게 지계를 발급해 토지 소유권을 법적으로 확인할 수 있도록 하였다.`,
 answer:&quot;④&quot;,
 explain:`(가)=대한제국 광무개혁이다. '청일전쟁으로 열강 세력균형이 깨지며 개혁이 중단'은 갑오·을미개혁(1894~96) 시기 설명으로, 광무개혁과는 무관 → 옳지 않은 설명.`,
 tip:&quot;광무개혁의 핵심 키워드(구본신참, 원수부, 지계 발급)를 정확히 암기하고 갑오개혁과 혼동하지 말 것.&quot;},

{no:&quot;12&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;(가)~(다)를 체결한 순서대로 나열한 것은? [3.4점]&lt;/p&gt;`,
 src:`(가) 영국은 일본이 이익을 보호하고 증진하기 위해 정당하며 필요하다고 인정하는 지도, 감리 및 보호의 조치를 한국에서 취할 권리를 승인한다.&lt;br&gt;(나) 제2조 러시아 제국 정부는 일본국이 한국에서 정치상, 군사상 및 경제상의 탁월한 이익을 갖는다는 것을 승인하고 …&lt;br&gt;(다) 일본은 조선이 이전의 상태로 돌아가서 일본이 다시 또 다른 나라와 전쟁을 일으키게 할 가능성을 방지한다는 입장에서 확실한 조치를 취하여야 한다.`,
 choices:`① (가)→(나)→(다)&lt;br&gt;② (가)→(다)→(나)&lt;br&gt;③ (나)→(가)→(다)&lt;br&gt;④ (다)→(가)→(나)&lt;br&gt;⑤ (다)→(나)→(가)`,
 answer:&quot;④ (다)→(가)→(나)&quot;,
 explain:`(다)=가쓰라-태프트 밀약(1905.7, 미국이 일본의 한국 지배 묵인)→(가)=제2차 영일동맹(1905.8, 영국 승인)→(나)=포츠머스 조약(1905.9, 러시아 승인). 을사조약(1905.11) 직전 일본이 국제적으로 한국 지배를 승인받는 사전 작업이었다.`,
 tip:&quot;을사조약 이전 열강의 묵인 과정(미→영→러 순)을 연표로 정리해 두자.&quot;},

{no:&quot;13&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;(가) 격문이 작성된 시기의 의병에 대한 설명으로 옳은 것은? [3.5점]&lt;/p&gt;`,
 src:`오호라 작년 10월에 저들이 한 행위는 만고에 일찍이 없던 일로서, 억압으로 한 조각의 종이에 조인해 5백 년 전해 오던 종묘사직이 드디어 하룻밤에 망했으니 …나라가 이와 같이 망해 갈진대 어찌 한번 싸우지 않을 수 있는가? — (가) —`,
 choices:`① 고종이 의병 해산 권고 조칙을 내리자 해산되었다.&lt;br&gt;② 유인석, 이소응 등 위정척사 사상을 가진 양반 유생들이 주도하였다.&lt;br&gt;③ 신돌석은 경상도와 강원도 일대에서 유격전을 펼치며 일본군과 맞섰다.&lt;br&gt;④ 을미사변이 일어나고 단발령이 시행되자 이에 반발해 전국적인 의병이 일어났다.&lt;br&gt;⑤ 해산된 의병과 농민 중 일부는 활빈당, 영학당 등을 조직해 무장 투쟁을 이어 갔다.`,
 answer:&quot;③&quot;,
 explain:`격문(가)은 을사조약(1905.11, 5백년 종묘사직이 망함) 직후 작성된 을사의병 격문이다. 평민의병장 신돌석이 경상도·강원도 일대에서 유격전을 펼친 것이 이 시기 의병의 특징이다.`,
 tip:&quot;신돌석=최초의 평민 의병장(을사의병), 유인석·이소응=위정척사 양반 유생 의병장(을미의병)으로 구분.&quot;},

{no:&quot;14&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;(가) 내용이 배경이 되어 일어난 의병에 대한 설명으로 옳지 &lt;u&gt;않은&lt;/u&gt; 것은? [3.5점]&lt;/p&gt;`,
 src:`[뉴스] 1907년 대한 제국 망국의 갈림길 — (가) 1907년 일본이 헤이그 특사 파견을 빌미로 고종을 강제 퇴위시키고 대한 제국의 군대를 해산하였다. 이에 대한 반발이 많은 것으로 예상된다.`,
 choices:`① 해산된 군인이 참여해 전력이 강화되고 조직화 되었다.&lt;br&gt;② 최익현은 전라도 태인에서 제자들과 함께 의병을 일으켰다.&lt;br&gt;③ 각국 공사관에 국제법상 교전 단체로 인정해줄 것을 요구하였다.&lt;br&gt;④ 이인영을 총대장, 허위를 군사장으로 추대해 13도 창의군을 결성했다.&lt;br&gt;⑤ 서울을 장악한 일본군을 몰아내기 위해 서울 진공 작전을 전개하였다.`,
 answer:&quot;②&quot;,
 explain:`(가)는 1907년 고종 강제퇴위·군대해산(정미7조약)을 배경으로 한 정미의병이다. 최익현이 태인에서 의병을 일으킨 것은 1906년 을사의병 때이므로, 정미의병의 배경 설명으로는 옳지 않다.`,
 tip:&quot;정미의병의 특징(해산군인 참여, 13도창의군, 서울진공작전)을 을사의병과 명확히 구분해 암기.&quot;},

{no:&quot;15&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;(가)~(마)를 체결한 순서대로 나열한 것은? [3.5점]&lt;/p&gt;`,
 src:`(가) 한국 황제 폐하는 한국 전부에 관한 일체 통치권을 완전히 또 영구히 일본 황제 폐하에게 양여한다.&lt;br&gt;(나) 한국 정부는 시정 개선에 관하여 통감의 지도를 받을 것…&lt;br&gt;(다) 한국 정부는 지금부터 일본국 정부의 중개를 거치지 않고서는 국제적 성질을 가진 어떤 조약이나 약속을 맺지 않을 것을 약속한다.&lt;br&gt;(라) 대한 정부는 ㉠일본 정부가 추천한 1인을 재정 고문으로 삼아 …&lt;br&gt;(마) 제4조 대한 제국 정부는 대일본 제국 정부의 행동이 …군사 전략상 필요한 지점을 상황에 따라 차지해 사용할 수 있다.`,
 choices:`① (가)→(나)→(다)→(라)→(마)&lt;br&gt;② (가)→(나)→(라)→(마)→(다)&lt;br&gt;③ (마)→(라)→(가)→(나)→(다)&lt;br&gt;④ (마)→(라)→(다)→(나)→(가)&lt;br&gt;⑤ (마)→(라)→(나)→(다)→(가)`,
 answer:&quot;④ (마)→(라)→(다)→(나)→(가)&quot;,
 explain:`(마)한일의정서(1904.2, 군사기지 사용)→(라)제1차 한일협약(1904.8, 고문정치)→(다)을사조약(1905.11, 외교권 박탈)→(나)정미7조약(1907.7, 차관정치)→(가)한일병합조약(1910.8, 통치권 양여).`,
 tip:&quot;5개 조약 순서와 키워드(군사기지/고문정치/외교권/차관정치/병합)를 세트로 암기.&quot;},

{no:&quot;16&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;㉠이 실시한 사업에 관한 설명으로 옳지 &lt;u&gt;않은&lt;/u&gt; 것은? [3.6점]&lt;/p&gt;`,
 choices:`① 사업 시행 결과 시중에 유통되던 화폐량이 증가하였다.&lt;br&gt;② 상평통보와 백동화 등이 일본 제일은행권으로 교환되었다.&lt;br&gt;③ 화폐 유통의 문란과 물가 폭등의 이유로 사업을 진행하였다.&lt;br&gt;④ 일본 제일은행에서 발행한 화폐가 나라의 공식적인 화폐가 되었다.&lt;br&gt;⑤ 사업에 필요한 비용 모두 일본으로부터 차관 형식으로 충당되어 대한 제국의 재정도 일본에 예속되었다.`,
 answer:&quot;①&quot;,
 explain:`㉠=화폐정리사업(1905, 재정고문 메가타). 옳지 않은 것: 백동화 회수·교환 과정에서 화폐 부족·혼란이 발생하여 실제 유통 화폐량은 감소하였다.`,
 tip:&quot;화폐정리사업=백동화 회수→제일은행권 교환→화폐 부족·국내 상공업자 타격이라는 흐름으로 암기.&quot;},

{no:&quot;17&quot;, area:&quot;emp&quot;,
 q:`&lt;p&gt;㉡을 암살한 인물로 옳은 것은? [3.4점]&lt;/p&gt;`,
 choices:`① 나철  ② 안중근  ③ 오기호  ④ 이재명  ⑤ 장인환`,
 answer:&quot;⑤ 장인환&quot;,
 explain:`㉡=외교고문 스티븐스. 1908년 샌프란시스코에서 장인환·전명운이 스티븐스를 저격하였고, 그중 장인환이 암살에 성공하였다.`,
 tip:&quot;안중근=이토 히로부미 / 이재명=이완용 습격 / 장인환·전명운=스티븐스. 의거 대상-인물 짝을 정확히 암기.&quot;},

{no:&quot;18&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;다음 사료를 발표한 단체에 대한 설명으로 옳은 것은? [3.6점]&lt;/p&gt;`,
 src:`무릇 나라의 독립은 오직 자강의 여하에 달려 있다. …자강의 방도는 다른 곳에 있지 않고 교육을 진작하고 산업을 일으키는 데 있다. …백성의 지혜를 깨우치고 국력을 양성할 방법은 오직 교육과 산업의 발달에 달려 있지 않겠는가?`,
 choices:`① 105인 사건으로 와해되었다.&lt;br&gt;② 월보를 발행하고 강연회를 개최하였다.&lt;br&gt;③ 태극서관을 운영해 계몽 서적을 출판하였다.&lt;br&gt;④ 일제가 황무지 개간을 요구하자 이에 반대하는 운동을 전개하였다.&lt;br&gt;⑤ 독립협회를 계승해 의회 중심의 입헌정치 체제를 목표로 활동하였다.`,
 answer:&quot;②&quot;,
 explain:`교육과 산업을 통한 자강을 강조한 애국계몽운동 단체(대한자강회 등)의 사료이다. 월보를 발행하고 강연회를 개최한 것이 해당 단체의 대표적인 활동이다.`,
 tip:&quot;보안회(황무지 개간 반대)·대한자강회(월보·강연회)·신민회(태극서관, 105인 사건)의 활동을 단체별로 구분하자.&quot;},

{no:&quot;19&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;㉠단체에 대한 설명으로 옳은 것만을 보기에서 모두 고른 것은? [3.6점]&lt;/p&gt;`,
 src:`1907년 안창호, 양기탁, 신채호 등은 국권회복과 새로운 국가 건설을 위해 비밀 결사인 ㉠을/를 결성했다. ㉠은/는 다수의 기독교계 인사 외에도 언론인, 교사, 학생 등 각계각층이 참여했다.`,
 choices:`ㄱ. 평양에 오산 학교, 정주에 대성 학교를 세웠다.&lt;br&gt;ㄴ. 평양에 자기 회사를 설립하는 등 민족 산업 육성에 힘썼다.&lt;br&gt;ㄷ. 고종 황제 강제 퇴위에 반대하다가 일제에 의해 강제로 해산되었다.&lt;br&gt;ㄹ. 이회영, 이상룡 등은 서간도 삼원보에 한인 마을을 조성하고 독립군을 양성하기 위해 신흥 강습소를 설립했다.`,
 answer:&quot;④ ㄴ, ㄹ&quot;,
 explain:`㉠=신민회(1907). 평양에 자기회사를 설립하는 등 민족산업 육성(ㄴ), 이회영·이상룡 등이 서간도 삼원보에 신흥강습소를 세움(ㄹ)이 정답. (참고: 오산학교는 정주, 대성학교는 평양에 위치 — ㄱ은 지명이 뒤바뀜. 신민회는 강제 해산이 아니라 105인 사건으로 와해 — ㄷ도 부정확)`,
 tip:&quot;신민회의 국내(오산·대성학교, 자기회사, 태극서관) 활동과 국외(서간도 삼원보, 신흥강습소) 활동을 나누어 암기.&quot;},

{no:&quot;20&quot;, area:&quot;open&quot;,
 q:`&lt;p&gt;(가), (나) 조약에 대한 설명으로 옳은 것만을 보기에서 모두 고른 것은? [3.5점]&lt;/p&gt;`,
 src:`(가) 부산 항구에서 일본국 인민이 통행할 수 있는 도로의 거리는 부두로부터 계산해 동서남북 각 직경 10리로 정한다.&lt;br&gt;(나) 조선의 양화진, 한성에 영업소를 개설할 경우를 제외하고, 각종 화물을 내지로 운반해 상점을 차리고 파는 것을 허가하지 않는다. 단, 내지에서 물건을 살 경우 지방관의 허가서를 받아야 한다.`,
 choices:`ㄱ. (가)를 통해 조선은 일본에게 방곡령을 선포하였다.&lt;br&gt;ㄴ. (가)를 통해 조선은 일본에게 최혜국 대우를 인정했다.&lt;br&gt;ㄷ. (나)는 임오군란을 계기로 체결되었다.&lt;br&gt;ㄹ. (나)는 조선을 청의 속방으로 규정하였다.`,
 answer:&quot;⑤ ㄷ, ㄹ&quot;,
 explain:`(가)=조일수호조규부록(1876, 일본인 통행거리 10리), (나)=조청상민수륙무역장정(1882). (나)는 임오군란을 계기로 체결(ㄷ)되었고, 조선을 청의 속방으로 규정(ㄹ)한 것이 핵심. 최혜국대우(ㄴ)는 조미조약, 방곡령(ㄱ)은 무관한 내용이라 틀림.`,
 tip:&quot;조일수호조규부록 vs 조청상민수륙무역장정의 핵심 조항을 구분해서 암기.&quot;},

{no:&quot;21&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;(가)에 들어갈 명칭으로 옳은 것은? [2.7점]&lt;/p&gt;`,
 src:`일제는 조선에서 빼앗은 토지를 관리하기 위해 (가)을/를 세웠다. (가)은/는 토지 수탈의 상징이자, 농민들에게 원망의 대상이었다. 일제 강점기에는 의열단원인 나석주가 이곳에서 의거 활동을 펼치기도 했다. (가)은/는 국내 주요 도시에 지점을 냈으며 만주와 타이완 등 다른 식민지까지 영업 지역을 확대했다.`,
 choices:`① 상회사  ② 통감부  ③ 대동 상회  ④ 장통 상회  ⑤ 동양 척식 주식회사`,
 answer:&quot;⑤ 동양 척식 주식회사&quot;,
 explain:`(가)=동양척식주식회사(1908, 일제의 토지 수탈 기관)이다. 의열단원 나석주가 이곳에서 의거 활동을 펼쳤다.`,
 tip:&quot;동양척식주식회사=토지 수탈 기관, 나석주 의거의 대상이라는 점을 함께 암기.&quot;},

{no:&quot;22&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;(가)에 들어갈 규정에 대한 설명으로 옳은 것은? [3.6점]&lt;/p&gt;`,
 src:`(가)에 관한 규정(제37관): 조선국에서 …국내에 양식이 결핍할 것을 우려해 일시 쌀수출을 금지하려고 할 때에는 1개월 전에 지방관이 일본 영사관에 통지해 미리 그 기간을 항구에 있는 일본 상인들에게 전달해 일률적으로 준수하는 데 편리하게 한다.`,
 choices:`① (가)에 들어갈 명칭은 방곡령이다.&lt;br&gt;② (가)을/를 시행하기 위해 농광회사를 세웠다.&lt;br&gt;③ (가)은/는 조일 수호 조규 속약에 근거하여 실시하였다.&lt;br&gt;④ 조선은 (가)을/를 통해 일본에게 배상금까지 받아았다.&lt;br&gt;⑤ (가)을/를 시행을 위해 '황성신문' 등 각종 신문에서 호응하였다.`,
 answer:&quot;①&quot;,
 explain:`(가) 규정은 방곡령이다. 1개월 전 통보 의무 등은 조일통상장정(1883) 제37관에 근거한 것이며, '농광회사 설립을 통해 시행'한다는 설명(②)은 옳지 않다(농광회사는 황무지 개간권 요구에 대응한 단체).`,
 tip:&quot;방곡령은 조일통상장정 제37관에 근거하며, 시행 후 오히려 일본에 배상금을 지불해야 했던 사례(함경도 방곡령 사건)도 함께 기억해두자.&quot;},

{no:&quot;23&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;다음 사료에 나타난 사건에 대한 설명으로 옳은 것을 보기에서 모두 고른 것은? [3.4점]&lt;/p&gt;`,
 src:`국채 1,300만원은 대한 제국의 존망에 직결된 것이라. 갚으면 나라가 존재하고 갚지 못하면 나라가 망하는 것은 필연적 사실이나 …2천만 인민들이 3개월 동안 흡연을 금지하고 그 대금으로 한 사람이 매달 20전씩 거둔다면 1,300만 원을 모을 수 있다.`,
 choices:`ㄱ. 대구에서 시작된 운동이다.&lt;br&gt;ㄴ. '독립신문' 등 각종 신문의 호응을 얻었다.&lt;br&gt;ㄷ. 일제는 양기탁을 구속하는 등 이 운동을 탄압하였다.&lt;br&gt;ㄹ. 청나라로부터 차관을 들여와 이 운동이 발생하였다.`,
 answer:&quot;② ㄱ, ㄷ&quot;,
 explain:`사료는 국채보상운동(1907)이다. 대구에서 시작(ㄱ)되었고, 일제가 양기탁을 구속하는 등 탄압(ㄷ)을 가했다. 독립신문(ㄴ)은 이미 1899년 폐간되어 무관하며, 청이 아닌 일본 차관 1,300만원이 문제였으므로 ㄹ도 틀림.`,
 tip:&quot;국채보상운동: 대구 시작 → 대한매일신보 등 호응 → 일제 탄압(양기탁 구속)으로 좌절, 이라는 흐름을 암기.&quot;},

{no:&quot;24&quot;, area:&quot;move&quot;,
 q:`&lt;p&gt;(가)에 들어갈 명칭으로 옳은 것은? [2.1점]&lt;/p&gt;`,
 src:`영국인 베델과 양기탁이 발간한 (가)은/는 일본과 동맹 관계에 있던 영국 국적의 베델을 발행인으로 내세워 일본에 저항하고 민족의식을 고취하는 기사를 실을 수 있었다.`,
 choices:`① 한성순보  ② 독립신문  ③ 제국신문  ④ 황성신문  ⑤ 대한매일신보`,
 answer:&quot;⑤ 대한매일신보&quot;,
 explain:`(가)=대한매일신보. 영국인 베델을 발행인으로 내세워 일본의 검열을 피하고 항일 논조의 기사를 실을 수 있었다.`,
 tip:&quot;한성순보(최초)·독립신문(최초 민간·한글)·황성신문(국한문혼용)·대한매일신보(베델, 검열 회피)를 짝지어 암기.&quot;},

{no:&quot;서술형1&quot;, area:&quot;essay&quot;,
 q:`&lt;p&gt;보기의 조항은 강화도 조약의 내용 중 일부이다. 보기의 조항을 참고하여, 강화도 조약이 불평등한 이유를 두 가지 서술하시오. (각5점, 총10점)&lt;/p&gt;`,
 src:`제1관 조선은 자주국이며 일본국과 평등한 권리를 갖는다.&lt;br&gt;제4관 조선국은 부산 외에도 2개 항구를 개방해 일본국 인민이 통상하게 한다.&lt;br&gt;제7관 일본국 항해자가 수시로 해안을 측량하고 지도를 만들도록 허가한다.&lt;br&gt;제10관 일본국 인민이 조선국이 지정한 각 항구에서 죄를 범했을 경우 모두 일본 관원에게 귀속시켜 조사해 밝힌다. — 강화도 조약 —`,
 choices:``,
 answer:&quot;① 해안측량권 허용 ② 영사재판권(치외법권) 허용&quot;,
 explain:`① 해안측량권(제7관): 일본 항해자가 수시로 조선 해안을 측량·지도 제작을 허용 → 군사적 목적으로 악용될 소지가 있는 불평등 조항.&lt;br&gt;② 영사재판권(제10관): 조선 영토 내 일본인의 범죄를 조선 법이 아닌 일본 관원이 재판 → 조선의 사법주권을 침해하는 대표적 불평등 조항.&lt;br&gt;[채점기준] 두 조항을 각각 명시하고 불평등한 이유를 함께 서술(각 5점).`,
 tip:&quot;불평등조약 서술형은 '조항 내용 + 그것이 가져오는 주권 침해'를 한 세트로 묶어 쓰는 연습을 하자.&quot;},

{no:&quot;서술형2&quot;, area:&quot;essay&quot;,
 q:`&lt;p&gt;다음은 갑오개혁에 대한 설명이다. 밑줄 친 군국기무처가 설치되었던 시기에 실시된 개혁 내용을 두 가지 서술하시오. (각 5점, 총10점)&lt;/p&gt;`,
 src:`경복궁을 불법으로 점령한 일본의 강요로 김홍집, 유길준 등 개화파 인사를 중심으로 새로운 정부가 수립되었다. 흥선 대원군이 섭정으로 추대되었으나 실질적인 권한은 없었다. 새정부는 군국기무처를 설치하고 여러 개혁 법안을 제정, 공포했다.`,
 choices:``,
 answer:&quot;아래 중 서로 다른 두 가지 서술&quot;,
 explain:`궁내부 설치(왕실-정부 사무 분리), 과거제 폐지(새로운 관리임용 절차 마련), 개국기년 사용(청의 연호 대신 자주성 표시), 재정의 탁지아문 일원화, 차별적 신분제·노비제 폐지, 조혼 금지·과부 재가 허용·고문과 연좌제 폐지·도량형 통일 중 두 가지를 서술하면 정답.&lt;br&gt;[채점기준] 서로 다른 두 가지를 정확히 서술하면 각 5점.`,
 tip:&quot;1차 갑오개혁(군국기무처) 개혁은 정치(왕실-정부 분리, 과거제 폐지)·경제(재정 일원화, 도량형 통일)·사회(신분제 폐지 등) 영역으로 나누어 암기.&quot;}
];

let idx = 0;
let flipped = false;

const card = document.getElementById('card');
const frontFace = document.getElementById('frontFace');
const backFace = document.getElementById('backFace');
const progressFill = document.getElementById('progressFill');
const progressText = document.getElementById('progressText');
const jumpRow = document.getElementById('jumpRow');

function render(){
  const item = cards[idx];
  const a = AREA[item.area];
  frontFace.innerHTML = `
    &lt;span class=&quot;badge ${a.cls}&quot;&gt;${a.label}&lt;/span&gt;
    &lt;div class=&quot;qnum&quot;&gt;문항 ${item.no}&lt;/div&gt;
    &lt;div class=&quot;qtext&quot;&gt;${item.q}
      ${item.src ? '&lt;div class=&quot;src&quot;&gt;'+item.src+'&lt;/div&gt;' : ''}
      ${item.diagram ? '&lt;div class=&quot;diagram&quot;&gt;'+item.diagram+'&lt;/div&gt;' : ''}
      ${item.choices ? '&lt;div class=&quot;choices&quot;&gt;'+item.choices+'&lt;/div&gt;' : ''}
    &lt;/div&gt;
    &lt;div class=&quot;hint&quot;&gt;  클릭해서 정답 보기&lt;/div&gt;
  `;
  backFace.innerHTML = `
    &lt;span class=&quot;badge ${a.cls}&quot;&gt;${a.label} · 정답&lt;/span&gt;
    &lt;div class=&quot;answer-line&quot;&gt;✅ ${item.answer}&lt;/div&gt;
    &lt;div class=&quot;explain&quot;&gt;${item.explain}&lt;/div&gt;
    &lt;div class=&quot;tip&quot;&gt;▶ 시험포인트: ${item.tip}&lt;/div&gt;
  `;
  card.classList.remove('flipped');
  flipped = false;
  progressFill.style.width = ((idx+1)/cards.length*100) + '%';
  progressText.textContent = (idx+1) + ' / ' + cards.length + '  (' + item.no + '번)';
  renderJump();
}

function renderJump(){
  jumpRow.innerHTML = '';
  cards.forEach((c,i)=&gt;{
    const b = document.createElement('button');
    b.className = 'jump-btn' + (i===idx ? ' current' : '');
    b.textContent = c.no.replace('서술형','S');
    b.onclick = (e)=&gt;{ e.stopPropagation(); idx=i; render(); };
    jumpRow.appendChild(b);
  });
}

card.addEventListener('click', ()=&gt;{
  flipped = !flipped;
  card.classList.toggle('flipped', flipped);
});

document.getElementById('flipBtn').onclick = ()=&gt;{
  flipped = !flipped;
  card.classList.toggle('flipped', flipped);
};
document.getElementById('prevBtn').onclick = ()=&gt;{
  idx = (idx - 1 + cards.length) % cards.length;
  render();
};
document.getElementById('nextBtn').onclick = ()=&gt;{
  idx = (idx + 1) % cards.length;
  render();
};

document.addEventListener('keydown', (e)=&gt;{
  if(e.key === 'ArrowLeft') document.getElementById('prevBtn').click();
  if(e.key === 'ArrowRight') document.getElementById('nextBtn').click();
  if(e.key === ' ') { e.preventDefault(); document.getElementById('flipBtn').click(); }
});

render();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>고등영어-1학년/경신고</category>
      <category>경신고</category>
      <category>기말</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/390</guid>
      <comments>https://ymedu.tistory.com/390#entry390comment</comments>
      <pubDate>Tue, 30 Jun 2026 15:15:24 +0900</pubDate>
    </item>
    <item>
      <title>경신고 과학 기말대비</title>
      <link>https://ymedu.tistory.com/389</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;통합과학1 기말고사 카드 퀴즈&lt;/title&gt;
&lt;style&gt;
  :root{
    --bg1:#6C5CE7; --bg2:#00B894; --bg3:#0984E3;
    --card-front:#2D3436; --card-back:#2D3436;
    --accent:#FDCB6E; --accent2:#FF7675; --accent3:#74B9FF;
    --text:#2D3436; --muted:#636E72; --white:#fff;
  }
  *{box-sizing:border-box;}
  body{
    margin:0; font-family:'Malgun Gothic','맑은 고딕',sans-serif;
    background:linear-gradient(135deg,#6C5CE7 0%, #0984E3 50%, #00B894 100%);
    min-height:100vh; display:flex; flex-direction:column; align-items:center;
    padding:24px 12px 60px;
  }
  h1{color:#fff; font-size:22px; margin:6px 0 2px; text-align:center; text-shadow:0 2px 6px rgba(0,0,0,.25);}
  .sub{color:#eef; font-size:13px; margin-bottom:16px; opacity:.9;}
  .progress-wrap{width:100%; max-width:480px; margin-bottom:14px;}
  .progress-bar{height:8px; background:rgba(255,255,255,.3); border-radius:8px; overflow:hidden;}
  .progress-fill{height:100%; background:linear-gradient(90deg,#FDCB6E,#FF7675); width:4.3%; transition:width .3s;}
  .progress-text{color:#fff; font-size:12px; text-align:center; margin-top:6px;}

  .scene{ width:100%; max-width:480px; height:520px; perspective:1600px; }
  .card{
    width:100%; height:100%; position:relative; transform-style:preserve-3d;
    transition:transform .6s cubic-bezier(.4,.2,.2,1); cursor:pointer;
  }
  .card.flipped{ transform:rotateY(180deg); }
  .face{
    position:absolute; inset:0; backface-visibility:hidden;
    border-radius:20px; padding:26px 24px; overflow-y:auto;
    box-shadow:0 14px 30px rgba(0,0,0,.3);
    display:flex; flex-direction:column;
  }
  .front{ background:linear-gradient(160deg,#2D3436,#34495E); color:#fff; }
  .back{ background:linear-gradient(160deg,#1e3a5f,#16213e); color:#fff; transform:rotateY(180deg); }

  .badge{
    display:inline-block; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:bold;
    background:var(--accent); color:#2D3436; margin-bottom:10px; width:fit-content;
  }
  .badge.area-mech{ background:#FF7675; color:#fff; }
  .badge.area-cell{ background:#00CEC9; color:#1b2b34; }
  .badge.area-earth{ background:#74B9FF; color:#1b2b34; }
  .badge.area-essay{ background:#FDCB6E; color:#2D3436; }

  .qnum{ font-size:14px; opacity:.8; margin-bottom:6px; }
  .qtext{ font-size:16px; line-height:1.6; flex:1; }
  .qtext p{ margin:6px 0; }
  .diagram{ background:rgba(255,255,255,.06); border-radius:12px; padding:6px; margin:8px 0; }
  .diagram svg{ width:100%; height:auto; display:block; }
  .choices{ margin-top:10px; font-size:14px; line-height:1.9; color:#dfe6e9;}
  .hint{ margin-top:auto; font-size:12px; color:#b2bec3; text-align:center; padding-top:10px;}

  .answer-line{
    font-size:18px; font-weight:bold; color:#FDCB6E; margin-bottom:10px;
    padding:8px 12px; background:rgba(255,255,255,.08); border-radius:10px;
  }
  .explain{ font-size:14.5px; line-height:1.7; color:#ecf0f1; flex:1; }
  .explain b{ color:#74B9FF; }
  .tip{
    margin-top:10px; font-size:13px; background:rgba(253,203,110,.15);
    border-left:4px solid #FDCB6E; padding:8px 10px; border-radius:6px; color:#ffeaa7;
  }

  .controls{ display:flex; gap:10px; margin-top:18px; align-items:center; }
  button{
    border:none; border-radius:12px; padding:12px 18px; font-size:14px; font-weight:bold;
    cursor:pointer; transition:transform .15s, box-shadow .15s; box-shadow:0 4px 10px rgba(0,0,0,.2);
  }
  button:active{ transform:scale(.95); }
  .btn-nav{ background:#fff; color:#2D3436; }
  .btn-flip{ background:linear-gradient(90deg,#FF7675,#FDCB6E); color:#2D3436; padding:12px 26px;}
  .btn-jump{ background:rgba(255,255,255,.85); color:#2D3436; }
  .jump-row{
    display:flex; flex-wrap:wrap; gap:6px; max-width:480px; justify-content:center; margin-top:18px;
  }
  .jump-btn{
    width:34px; height:34px; border-radius:50%; font-size:12px; padding:0;
    background:rgba(255,255,255,.25); color:#fff; border:1px solid rgba(255,255,255,.4);
  }
  .jump-btn.done{ background:#00B894; border-color:#00B894;}
  .jump-btn.current{ background:#FDCB6E; color:#2D3436; border-color:#FDCB6E; transform:scale(1.15);}
  .area-title{ color:#fff; font-size:13px; opacity:.85; margin-top:4px;}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h1&gt;  통합과학1 기말고사 카드 퀴즈&lt;/h1&gt;
&lt;div class=&quot;sub&quot;&gt;카드를 클릭하면 뒤집혀서 정답과 해설을 볼 수 있어요&lt;/div&gt;

&lt;div class=&quot;progress-wrap&quot;&gt;
  &lt;div class=&quot;progress-bar&quot;&gt;&lt;div class=&quot;progress-fill&quot; id=&quot;progressFill&quot;&gt;&lt;/div&gt;&lt;/div&gt;
  &lt;div class=&quot;progress-text&quot; id=&quot;progressText&quot;&gt;1 / 23&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;scene&quot;&gt;
  &lt;div class=&quot;card&quot; id=&quot;card&quot;&gt;
    &lt;div class=&quot;face front&quot; id=&quot;frontFace&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;face back&quot; id=&quot;backFace&quot;&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;controls&quot;&gt;
  &lt;button class=&quot;btn-nav&quot; id=&quot;prevBtn&quot;&gt;◀ 이전&lt;/button&gt;
  &lt;button class=&quot;btn-flip&quot; id=&quot;flipBtn&quot;&gt;  뒤집기&lt;/button&gt;
  &lt;button class=&quot;btn-nav&quot; id=&quot;nextBtn&quot;&gt;다음 ▶&lt;/button&gt;
&lt;/div&gt;

&lt;div class=&quot;jump-row&quot; id=&quot;jumpRow&quot;&gt;&lt;/div&gt;

&lt;script&gt;
const AREA = {
  mech:  { label: &quot;역학&quot;, cls: &quot;area-mech&quot; },
  cell:  { label: &quot;세포·물질대사&quot;, cls: &quot;area-cell&quot; },
  earth: { label: &quot;지구시스템&quot;, cls: &quot;area-earth&quot; },
  essay: { label: &quot;서술형&quot;, cls: &quot;area-essay&quot; }
};

const cards = [
{no:&quot;1&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;그래프는 직선상에서 운동하는 물체의 위치를 시간에 따라 나타낸 것이다.&lt;/p&gt;&lt;p&gt;0부터 2t까지 물체의 운동에 대한 설명으로 옳은 것만을 보기에서 고르시오. [4.2점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 220&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;line x1=&quot;50&quot; y1=&quot;190&quot; x2=&quot;300&quot; y2=&quot;190&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;line x1=&quot;50&quot; y1=&quot;190&quot; x2=&quot;50&quot; y2=&quot;20&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;polyline points=&quot;50,190 150,40 270,110&quot; fill=&quot;none&quot; stroke=&quot;#FDCB6E&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;line x1=&quot;150&quot; y1=&quot;190&quot; x2=&quot;150&quot; y2=&quot;40&quot; stroke=&quot;#636e72&quot; stroke-width=&quot;1&quot; stroke-dasharray=&quot;3,3&quot;/&gt;
   &lt;line x1=&quot;270&quot; y1=&quot;190&quot; x2=&quot;270&quot; y2=&quot;110&quot; stroke=&quot;#636e72&quot; stroke-width=&quot;1&quot; stroke-dasharray=&quot;3,3&quot;/&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;40&quot; x2=&quot;50&quot; y2=&quot;40&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;110&quot; x2=&quot;50&quot; y2=&quot;110&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;text x=&quot;20&quot; y=&quot;44&quot; fill=&quot;#fff&quot; font-size=&quot;13&quot;&gt;2d&lt;/text&gt;
   &lt;text x=&quot;28&quot; y=&quot;114&quot; fill=&quot;#fff&quot; font-size=&quot;13&quot;&gt;d&lt;/text&gt;
   &lt;text x=&quot;146&quot; y=&quot;206&quot; fill=&quot;#fff&quot; font-size=&quot;13&quot;&gt;t&lt;/text&gt;
   &lt;text x=&quot;262&quot; y=&quot;206&quot; fill=&quot;#fff&quot; font-size=&quot;13&quot;&gt;2t&lt;/text&gt;
   &lt;text x=&quot;300&quot; y=&quot;206&quot; fill=&quot;#fff&quot; font-size=&quot;12&quot;&gt;시간&lt;/text&gt;
   &lt;text x=&quot;18&quot; y=&quot;16&quot; fill=&quot;#fff&quot; font-size=&quot;12&quot;&gt;위치&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. 이동 거리는 2d이다.&lt;br&gt;ㄴ. 변위의 크기는 d이다.&lt;br&gt;ㄷ. 평균 속력은 2d/3t이다.`,
 answer:&quot;② ㄴ&quot;,
 explain:`이동거리 = (0→2d) + (2d→d) = &lt;b&gt;3d&lt;/b&gt; (ㄱ 틀림)&lt;br&gt;변위 = 나중위치(d) − 처음위치(0) = &lt;b&gt;d&lt;/b&gt; (ㄴ 맞음)&lt;br&gt;평균속력 = 이동거리/시간 = &lt;b&gt;3d/2t&lt;/b&gt; (ㄷ 틀림)`,
 tip:&quot;이동거리와 변위를 구분! 그래프가 꺾이는 지점마다 구간을 나눠 계산하자.&quot;},

{no:&quot;2&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;그림은 공기 저항과 마찰을 고려하지 않은 물체의 운동 A, B, C, D를 속력의 변화와 운동 방향의 변화에 따라 분류한 순서도이다. (등속 원운동, 등속도 운동, 수평 방향으로 던진 물체의 운동, 자유 낙하 운동 중 하나)&lt;/p&gt;&lt;p&gt;이에 대한 설명으로 옳지 &lt;u&gt;않은&lt;/u&gt; 것은? [4.1점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 230&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;rect x=&quot;90&quot; y=&quot;10&quot; width=&quot;140&quot; height=&quot;30&quot; rx=&quot;8&quot; fill=&quot;#34495e&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;text x=&quot;100&quot; y=&quot;30&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;A,B,C,D&lt;/text&gt;
   &lt;text x=&quot;155&quot; y=&quot;55&quot; fill=&quot;#FDCB6E&quot; font-size=&quot;11&quot;&gt;속력 변하나?&lt;/text&gt;
   &lt;line x1=&quot;160&quot; y1=&quot;40&quot; x2=&quot;100&quot; y2=&quot;75&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;line x1=&quot;160&quot; y1=&quot;40&quot; x2=&quot;220&quot; y2=&quot;75&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;text x=&quot;105&quot; y=&quot;68&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;아니오&lt;/text&gt;
   &lt;text x=&quot;215&quot; y=&quot;68&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;예&lt;/text&gt;
   &lt;rect x=&quot;55&quot; y=&quot;75&quot; width=&quot;100&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#00CEC9&quot;/&gt;
   &lt;text x=&quot;65&quot; y=&quot;93&quot; fill=&quot;#1b2b34&quot; font-size=&quot;10&quot;&gt;방향 변하나?&lt;/text&gt;
   &lt;rect x=&quot;175&quot; y=&quot;75&quot; width=&quot;100&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#00CEC9&quot;/&gt;
   &lt;text x=&quot;185&quot; y=&quot;93&quot; fill=&quot;#1b2b34&quot; font-size=&quot;10&quot;&gt;방향 변하나?&lt;/text&gt;
   &lt;line x1=&quot;80&quot; y1=&quot;103&quot; x2=&quot;50&quot; y2=&quot;140&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;line x1=&quot;130&quot; y1=&quot;103&quot; x2=&quot;150&quot; y2=&quot;140&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;line x1=&quot;200&quot; y1=&quot;103&quot; x2=&quot;180&quot; y2=&quot;140&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;line x1=&quot;250&quot; y1=&quot;103&quot; x2=&quot;270&quot; y2=&quot;140&quot; stroke=&quot;#dfe6e9&quot;/&gt;
   &lt;text x=&quot;35&quot; y=&quot;120&quot; fill=&quot;#fff&quot; font-size=&quot;9&quot;&gt;아니오&lt;/text&gt;
   &lt;text x=&quot;125&quot; y=&quot;120&quot; fill=&quot;#fff&quot; font-size=&quot;9&quot;&gt;예&lt;/text&gt;
   &lt;text x=&quot;155&quot; y=&quot;120&quot; fill=&quot;#fff&quot; font-size=&quot;9&quot;&gt;아니오&lt;/text&gt;
   &lt;text x=&quot;255&quot; y=&quot;120&quot; fill=&quot;#fff&quot; font-size=&quot;9&quot;&gt;예&lt;/text&gt;
   &lt;rect x=&quot;20&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#FF7675&quot;/&gt;&lt;text x=&quot;42&quot; y=&quot;158&quot; fill=&quot;#fff&quot; font-size=&quot;14&quot; font-weight=&quot;bold&quot;&gt;A&lt;/text&gt;
   &lt;rect x=&quot;120&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#FF7675&quot;/&gt;&lt;text x=&quot;142&quot; y=&quot;158&quot; fill=&quot;#fff&quot; font-size=&quot;14&quot; font-weight=&quot;bold&quot;&gt;B&lt;/text&gt;
   &lt;rect x=&quot;150&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#FDCB6E&quot;/&gt;&lt;text x=&quot;172&quot; y=&quot;158&quot; fill=&quot;#1b2b34&quot; font-size=&quot;14&quot; font-weight=&quot;bold&quot;&gt;C&lt;/text&gt;
   &lt;rect x=&quot;250&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;28&quot; rx=&quot;8&quot; fill=&quot;#FDCB6E&quot;/&gt;&lt;text x=&quot;272&quot; y=&quot;158&quot; fill=&quot;#1b2b34&quot; font-size=&quot;14&quot; font-weight=&quot;bold&quot;&gt;D&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`① A는 일정한 속력으로 직선 경로를 따라 이동&lt;br&gt;② B는 등속 원운동&lt;br&gt;③ C는 연직 아래 방향으로 중력이 일정하게 증가하는 운동&lt;br&gt;④ D는 수평 방향으로 등속도 운동을 함&lt;br&gt;⑤ 연직 아래로 등가속도 직선운동을 하는 것은 C, D의 공통 특징`,
 answer:&quot;③&quot;,
 explain:`A: 속력·방향 불변 → 등속 직선운동&lt;br&gt;B: 속력 불변, 방향 변화 → 등속 원운동&lt;br&gt;C: 속력·방향 변화 → 수평 투사 운동&lt;br&gt;D: 속력 변화, 방향 불변 → 자유낙하&lt;br&gt;③에서 '중력이 일정하게 증가'가 틀림 — &lt;b&gt;중력(중력가속도)은 항상 일정&lt;/b&gt;하며, 속력이 증가하는 것이지 힘이 커지는 게 아니다.`,
 tip:&quot;자유낙하·포물선 운동에서 '힘은 일정, 속력만 증가'를 명확히 구분하자.&quot;},

{no:&quot;3&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;다음은 수평으로 던진 물체의 운동에 대한 실험이다. 쇠구슬 발사 장치 2개로 A,B를 동시 발사하고 경로를 기록, B를 C로 바꿔 다시 발사.&lt;/p&gt;&lt;p&gt;실험 결과 그래프 해석으로 옳은 것만을 보기에서 고르시오. [4.5점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 220&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;200&quot; x2=&quot;300&quot; y2=&quot;200&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;text x=&quot;20&quot; y=&quot;80&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;A발사&lt;/text&gt;
   &lt;text x=&quot;20&quot; y=&quot;140&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;B,C발사&lt;/text&gt;
   &lt;path d=&quot;M50,80 Q150,90 270,200&quot; fill=&quot;none&quot; stroke=&quot;#74B9FF&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;path d=&quot;M50,140 Q140,150 230,200&quot; fill=&quot;none&quot; stroke=&quot;#FF7675&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;text x=&quot;255&quot; y=&quot;215&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;C&lt;/text&gt;
   &lt;text x=&quot;265&quot; y=&quot;215&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;A,B&lt;/text&gt;
   &lt;text x=&quot;300&quot; y=&quot;215&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;수평면&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. A는 B보다 수평면에 늦게 도달한다.&lt;br&gt;ㄴ. 발사된 순간, A와 B의 수평 방향 속력은 같다.&lt;br&gt;ㄷ. B, C가 각각 수평면에 도달한 순간, 연직 방향 속력은 같다.`,
 answer:&quot;③ ㄱ, ㄷ&quot;,
 explain:`A는 B,C보다 더 높은 위치에서 발사되어 낙하시간이 길기 때문에 &lt;b&gt;A가 B보다 늦게 도달&lt;/b&gt;한다(ㄱ 맞음). 그런데 A와 B는 같은 지점에 도달하는 것으로 나타나 있는데, A의 낙하시간이 더 긴데도 같은 수평거리를 이동했으므로 &lt;b&gt;A의 수평 속력은 B보다 작아야&lt;/b&gt; 한다 → '수평 속력이 같다'는 ㄴ은 틀림. B,C는 같은 높이에서 발사되어 낙하시간이 같으므로 도달 순간 연직 방향 속력도 같다(ㄷ 맞음).&lt;/br&gt;`,
 tip:&quot;수평투사 운동은 수평·연직을 분리해서 분석! 수평=발사속력에만 의존, 연직=낙하높이에만 의존.&quot;},

{no:&quot;4&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;(가)는 마찰이 없는 수평면에서 질량 3kg(6m/s), 4kg(3m/s)인 물체 A, B가 동속도로 운동하는 모습. (나)는 충돌하는 동안 A가 B에 작용한 힘-시간 그래프(넓이=I). 충돌 후 방향 동일, B 속력은 A의 3배.&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.4점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 200&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;rect x=&quot;40&quot; y=&quot;60&quot; width=&quot;50&quot; height=&quot;35&quot; rx=&quot;4&quot; fill=&quot;#74B9FF&quot;/&gt;
   &lt;text x=&quot;55&quot; y=&quot;82&quot; fill=&quot;#1b2b34&quot; font-size=&quot;12&quot; font-weight=&quot;bold&quot;&gt;A 3kg&lt;/text&gt;
   &lt;text x=&quot;40&quot; y=&quot;50&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;6m/s →&lt;/text&gt;
   &lt;rect x=&quot;130&quot; y=&quot;60&quot; width=&quot;55&quot; height=&quot;35&quot; rx=&quot;4&quot; fill=&quot;#FF7675&quot;/&gt;
   &lt;text x=&quot;143&quot; y=&quot;82&quot; fill=&quot;#1b2b34&quot; font-size=&quot;12&quot; font-weight=&quot;bold&quot;&gt;B 4kg&lt;/text&gt;
   &lt;text x=&quot;130&quot; y=&quot;50&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;3m/s →&lt;/text&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;180&quot; x2=&quot;280&quot; y2=&quot;180&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;line x1=&quot;220&quot; y1=&quot;180&quot; x2=&quot;220&quot; y2=&quot;115&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;path d=&quot;M220,180 Q245,118 270,180&quot; fill=&quot;rgba(253,203,110,.3)&quot; stroke=&quot;#FDCB6E&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;text x=&quot;230&quot; y=&quot;110&quot; fill=&quot;#fff&quot; font-size=&quot;12&quot;&gt;힘(I=넓이)&lt;/text&gt;
   &lt;text x=&quot;280&quot; y=&quot;195&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;시간&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. 충돌 후 B의 속력은 3m/s이다.&lt;br&gt;ㄴ. A의 운동량 크기는 충돌 전이 충돌 후의 3배이다.&lt;br&gt;ㄷ. I = 12N·s이다.`,
 answer:&quot;④ ㄴ, ㄷ&quot;,
 explain:`운동량보존: 3(6)+4(3)=3v_A+4(3v_A) → 30=15v_A → &lt;b&gt;v_A=2, v_B=6m/s&lt;/b&gt; (ㄱ 틀림)&lt;br&gt;충돌 전 A운동량=18, 충돌 후=6 → 18:6=3:1 (&lt;b&gt;ㄴ 맞음&lt;/b&gt;)&lt;br&gt;I = A의 운동량변화량 = |18−6| = &lt;b&gt;12N·s&lt;/b&gt; (ㄷ 맞음)`,
 tip:&quot;운동량 보존식은 방향(부호)을 꼭 표시! 충격량=운동량 변화량이라는 관계를 바로 연결하자.&quot;},

{no:&quot;5&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;탑승자의 안전을 위해 자동차 앞·뒷부분에 잘 구겨지도록 지그재그 모양의 ㉠크럼플존을 만든다. 그래프는 ㉡크럼플존이 잘 작동하는 차와 그렇지 않은 차의 힘-시간 그래프.&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.5점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 200&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;180&quot; x2=&quot;290&quot; y2=&quot;180&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;180&quot; x2=&quot;40&quot; y2=&quot;20&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;path d=&quot;M40,180 L70,40 L100,180&quot; fill=&quot;none&quot; stroke=&quot;#FF7675&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;text x=&quot;62&quot; y=&quot;32&quot; fill=&quot;#FF7675&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot;&gt;A&lt;/text&gt;
   &lt;path d=&quot;M40,180 Q150,90 280,178&quot; fill=&quot;none&quot; stroke=&quot;#74B9FF&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;text x=&quot;190&quot; y=&quot;115&quot; fill=&quot;#74B9FF&quot; font-size=&quot;13&quot; font-weight=&quot;bold&quot;&gt;B&lt;/text&gt;
   &lt;text x=&quot;10&quot; y=&quot;16&quot; fill=&quot;#fff&quot; font-size=&quot;12&quot;&gt;힘&lt;/text&gt;
   &lt;text x=&quot;290&quot; y=&quot;196&quot; fill=&quot;#fff&quot; font-size=&quot;12&quot;&gt;시간&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. ㉠은 충돌하는 동안 탑승자가 받는 평균 힘을 감소시킨다.&lt;br&gt;ㄴ. ㉡에 해당하는 그래프는 A이다.&lt;br&gt;ㄷ. 충격량의 크기는 B에서가 A에서보다 작다.`,
 answer:&quot;① ㄱ&quot;,
 explain:`크럼플존은 충돌 &lt;b&gt;시간을 늘려&lt;/b&gt; 평균 힘을 줄이는 안전장치(ㄱ 맞음). 잘 작동하는 차는 힘이 작고 넓게 퍼진 그래프 &lt;b&gt;B&lt;/b&gt;이므로 ㄴ(A) 틀림. 충격량(넓이)은 질량·속도변화가 같으면 동일하므로 ㄷ도 틀림.`,
 tip:&quot;충격량(넓이)은 같아도, 시간을 늘리면 힘의 최댓값(높이)은 작아진다 — 에어백·안전벨트도 같은 원리!&quot;},

{no:&quot;6&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;(가)는 물체 A(2m, 4v)가 정지한 B(3m)를 향해 운동하는 모습, (나)는 충돌 후 A가 반대 방향 v로, B가 같은 방향으로 운동하는 모습이다.&lt;/p&gt;&lt;p&gt;충돌 후 B의 속력은? [3.7점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 140&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;text x=&quot;10&quot; y=&quot;20&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;(가)&lt;/text&gt;
   &lt;rect x=&quot;40&quot; y=&quot;25&quot; width=&quot;45&quot; height=&quot;30&quot; rx=&quot;5&quot; fill=&quot;#74B9FF&quot;/&gt;&lt;text x=&quot;55&quot; y=&quot;45&quot; fill=&quot;#1b2b34&quot; font-size=&quot;10&quot;&gt;2m&lt;/text&gt;
   &lt;text x=&quot;40&quot; y=&quot;20&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;4v →&lt;/text&gt;
   &lt;rect x=&quot;150&quot; y=&quot;25&quot; width=&quot;45&quot; height=&quot;30&quot; rx=&quot;5&quot; fill=&quot;#FF7675&quot;/&gt;&lt;text x=&quot;165&quot; y=&quot;45&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;3m&lt;/text&gt;
   &lt;text x=&quot;150&quot; y=&quot;20&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;정지&lt;/text&gt;
   &lt;text x=&quot;10&quot; y=&quot;90&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;(나)&lt;/text&gt;
   &lt;rect x=&quot;40&quot; y=&quot;95&quot; width=&quot;45&quot; height=&quot;30&quot; rx=&quot;5&quot; fill=&quot;#74B9FF&quot;/&gt;&lt;text x=&quot;55&quot; y=&quot;115&quot; fill=&quot;#1b2b34&quot; font-size=&quot;10&quot;&gt;2m&lt;/text&gt;
   &lt;text x=&quot;20&quot; y=&quot;90&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;← v&lt;/text&gt;
   &lt;rect x=&quot;180&quot; y=&quot;95&quot; width=&quot;45&quot; height=&quot;30&quot; rx=&quot;5&quot; fill=&quot;#FF7675&quot;/&gt;&lt;text x=&quot;195&quot; y=&quot;115&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;3m&lt;/text&gt;
   &lt;text x=&quot;230&quot; y=&quot;90&quot; fill=&quot;#fff&quot; font-size=&quot;10&quot;&gt;v_B →&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`① 2v  ② 10/3 v  ③ 5/2 v  ④ 3v  ⑤ 7/2 v`,
 answer:&quot;② 10/3 v&quot;,
 explain:`운동량 보존: 2m(4v) = 2m(−v) + 3m·v_B&lt;br&gt;8mv + 2mv = 3m·v_B → &lt;b&gt;v_B = (10/3)v&lt;/b&gt;`,
 tip:&quot;충돌 후 반대 방향으로 튕긴 물체는 속도에 (−) 부호를 붙이는 것을 잊지 말자.&quot;},

{no:&quot;7&quot;, area:&quot;mech&quot;,
 q:`&lt;p&gt;(문제 6과 동일 상황) 충돌하는 동안 A가 받은 충격량의 크기는? [3.6점]&lt;/p&gt;`,
 choices:`① 6mv  ② 7mv  ③ 8mv  ④ 9mv  ⑤ 10mv`,
 answer:&quot;⑤ 10mv&quot;,
 explain:`A가 받은 충격량 = A의 운동량 변화량&lt;br&gt;= |충돌 후 A운동량 − 충돌 전 A운동량| = |2m(−v) − 2m(4v)| = |−2mv−8mv| = &lt;b&gt;10mv&lt;/b&gt;`,
 tip:&quot;A가 받은 충격량은 작용·반작용 법칙에 의해 B가 받은 충격량과 크기가 같고 방향이 반대다.&quot;},

{no:&quot;8&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;그림은 어떤 동물 세포의 구조를 나타낸 것이다. A~C는 각각 핵, 라이보솜, 마이토콘드리아 중 하나이다.&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.5점]&lt;/p&gt;`,
 choices:`ㄱ. A는 유전정보를 저장하는 DNA가 들어 있다.&lt;br&gt;ㄴ. B는 유전정보에 따라 단백질을 합성한다.&lt;br&gt;ㄷ. C에서 세포호흡이 일어난다.`,
 answer:&quot;⑤ ㄱ, ㄴ, ㄷ&quot;,
 explain:`A=핵(DNA 저장), B=리보솜(단백질 합성), C=마이토콘드리아(세포호흡). ㄱ, ㄴ, ㄷ 모두 맞는 설명.`,
 tip:&quot;핵=유전정보, 리보솜=단백질 합성, 미토콘드리아=세포호흡(ATP 생성)을 1:1로 암기!&quot;},

{no:&quot;9&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;그림은 세포막을 통한 물질의 이동 방식을 나타낸 것이다(인지질 2중층과 ㉠ 단백질).&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.2점]&lt;/p&gt;`,
 choices:`ㄱ. ㉠은 지질에 인산이 결합되어 있는 물질이다.&lt;br&gt;ㄴ. ㉠은 소수성 부분이 바깥쪽을 향하고 있다.&lt;br&gt;ㄷ. 아미노산은 인지질 2중층을 통해 확산된다.`,
 answer:&quot;① ㄱ&quot;,
 explain:`㉠은 인지질이다. 인지질은 인산(머리)이 지방산(꼬리)에 결합된 구조이다(&lt;b&gt;ㄱ 맞음&lt;/b&gt;). 그러나 소수성 부분(지방산 꼬리)은 막의 &lt;b&gt;안쪽&lt;/b&gt;을 향하므로 ㄴ은 틀림. 아미노산은 극성을 띠는 분자라 인지질 2중층을 직접 통과하지 못하고 막단백질의 도움이 필요하므로 ㄷ도 틀림.`,
 tip:&quot;인지질 2중층 구조(머리=친수성=바깥, 꼬리=소수성=안쪽)는 그림으로 그려서 외우자.&quot;},

{no:&quot;10&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;그림 (가)와 (나)는 각각 양파 표피세포에 증류수와 설탕물을 떨어뜨린 뒤 현미경으로 관찰한 결과이다.&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.6점]&lt;/p&gt;`,
 choices:`ㄱ. (가)의 표피세포에서는 세포막을 통한 물의 이동이 없다.&lt;br&gt;ㄴ. (나)에서 떨어뜨린 설탕물의 농도는 세포 내부보다 크다.&lt;br&gt;ㄷ. (나)에서 (세포외부로 나가는 물의 양 ÷ 세포내부로 들어오는 물의 양)의 값은 1보다 작다.`,
 answer:&quot;② ㄴ&quot;,
 explain:`(가) 증류수(저장액)→삼투로 물이 세포 안으로 들어오므로 물의 이동이 있음(&lt;b&gt;ㄱ 틀림&lt;/b&gt;). (나) 설탕물(고장액)에 의해 원형질분리가 일어났다는 것은 떨어뜨린 설탕물의 농도가 세포 내부보다 컸다는 의미(&lt;b&gt;ㄴ 맞음&lt;/b&gt;). 고장액 환경에서는 세포 밖으로 나가는 물이 안으로 들어오는 물보다 많으므로 그 비율은 1보다 커야 하는데, 보기는 '1보다 작다'고 했으므로 &lt;b&gt;ㄷ 틀림&lt;/b&gt;.`,
 tip:&quot;저장액·고장액·등장액에서 물의 이동 방향은 항상 '농도 낮은 쪽 → 높은 쪽'으로 암기.&quot;},

{no:&quot;11&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;세포막으로 분리된 U자관에 농도가 다른 설탕 용액 A, B를 같은 높이로 넣고 시간이 지나 평형에 도달했더니 B쪽 수면이 올라갔다.&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.3점]&lt;/p&gt;`,
 choices:`ㄱ. 농도는 A가 B보다 작다.&lt;br&gt;ㄴ. 설탕 용액 A에서 B쪽으로 설탕 분자가 이동한다.&lt;br&gt;ㄷ. 용매(물) 분자는 B에서 A쪽으로만 이동한다.`,
 answer:&quot;① ㄱ&quot;,
 explain:`B쪽 수면 상승 = 물이 A에서 B로 이동했다는 의미 = B의 농도가 A보다 높음, 즉 &lt;b&gt;농도는 A가 B보다 작다&lt;/b&gt;(ㄱ 맞음). 용질(설탕)은 고농도(B)에서 저농도(A)로 확산되므로 'A에서 B로 이동'이라는 ㄴ은 방향이 반대라 틀림. 용매(물)는 저농도(A)에서 고농도(B)로 이동하므로 'B에서 A로 이동한다'는 ㄷ도 방향이 반대라 틀림.`,
 tip:&quot;삼투(물의 이동)와 확산(용질의 이동)은 방향이 반대! 헷갈리지 말 것.&quot;},

{no:&quot;12&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;그림은 사람에서 일어나는 물질대사 (가)와 (나)를 나타낸 것이다.&lt;br&gt;(가) 아미노산 → 단백질&lt;br&gt;(나) 포도당, O₂ → CO₂, H₂O&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4점]&lt;/p&gt;`,
 choices:`ㄱ. (가)는 이화 작용이다.&lt;br&gt;ㄴ. (나)는 에너지를 방출하며 반응이 일어난다.&lt;br&gt;ㄷ. (가), (나) 모두 효소가 관여한다.`,
 answer:&quot;④ ㄴ, ㄷ&quot;,
 explain:`(가) 아미노산→단백질은 작은 분자가 큰 분자로 합성되는 &lt;b&gt;동화작용&lt;/b&gt;이므로 '이화작용'이라는 ㄱ은 틀림. (나) 세포호흡은 에너지를 방출하는 반응이다(&lt;b&gt;ㄴ 맞음&lt;/b&gt;). 동화작용·이화작용 모두 효소가 관여한다(&lt;b&gt;ㄷ 맞음&lt;/b&gt;).`,
 tip:&quot;동화작용(흡열, 작은→큰 분자) ↔ 이화작용(발열, 큰→작은 분자). 광합성=동화 / 세포호흡=이화로 짝지어 암기.&quot;},

{no:&quot;13&quot;, area:&quot;cell&quot;,
 q:`&lt;p&gt;그림은 생체촉매(효소)가 있을 때와 없을 때의 화학 반응 경로에 따른 에너지 변화를 나타낸 것이다(A, B, C, D 표시).&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.3점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 210&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;190&quot; x2=&quot;290&quot; y2=&quot;190&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;190&quot; x2=&quot;40&quot; y2=&quot;20&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;path d=&quot;M40,150 Q150,15 260,140&quot; fill=&quot;none&quot; stroke=&quot;#FF7675&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;path d=&quot;M40,150 Q150,60 260,140&quot; fill=&quot;none&quot; stroke=&quot;#74B9FF&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;line x1=&quot;150&quot; y1=&quot;190&quot; x2=&quot;150&quot; y2=&quot;60&quot; stroke=&quot;#636e72&quot; stroke-dasharray=&quot;3,3&quot;/&gt;
   &lt;text x=&quot;155&quot; y=&quot;40&quot; fill=&quot;#FF7675&quot; font-size=&quot;11&quot;&gt;C&lt;/text&gt;
   &lt;text x=&quot;155&quot; y=&quot;80&quot; fill=&quot;#74B9FF&quot; font-size=&quot;11&quot;&gt;A&lt;/text&gt;
   &lt;text x=&quot;155&quot; y=&quot;105&quot; fill=&quot;#FDCB6E&quot; font-size=&quot;11&quot;&gt;B&lt;/text&gt;
   &lt;text x=&quot;20&quot; y=&quot;155&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;반응물&lt;/text&gt;
   &lt;text x=&quot;240&quot; y=&quot;155&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;생성물&lt;/text&gt;
   &lt;text x=&quot;100&quot; y=&quot;200&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;반응의 진행&lt;/text&gt;
   &lt;text x=&quot;6&quot; y=&quot;16&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;에너지&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. 반응물의 에너지가 생성물의 에너지보다 크다.&lt;br&gt;ㄴ. 효소가 있을 때의 활성화 에너지는 A이다.&lt;br&gt;ㄷ. 반응열은 효소의 유무와 관계없이 일정하다.`,
 answer:&quot;③ ㄱ, ㄷ&quot;,
 explain:`그래프는 발열 반응으로, 반응물의 에너지가 생성물의 에너지보다 큼(&lt;b&gt;ㄱ 맞음&lt;/b&gt;). 반응열(반응물-생성물의 에너지 차)은 효소의 유무와 관계없이 항상 일정함(&lt;b&gt;ㄷ 맞음&lt;/b&gt;). 효소가 있을 때의 활성화 에너지를 가리키는 구간 표시는 그림상 A가 아니므로 &lt;b&gt;ㄴ 틀림&lt;/b&gt;(정답표 기준).`,
 tip:&quot;'활성화에너지를 낮춘다' ≠ '반응열을 바꾼다'. 효소는 속도만 변화, 반응열은 절대 불변!&quot;},

{no:&quot;14&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 지구시스템을 구성하는 권역 간의 상호작용을, 표는 상호작용 A~C의 예를 나타낸 것이다. I과 II는 각각 기권, 수권 중 하나이다.&lt;br&gt;A: 바람에 의해 해류가 발생&lt;br&gt;B: 육상 식물이 ㉠광합성 과정에서 대기 중 이산화탄소를 흡수&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.8점]&lt;/p&gt;`,
 choices:`ㄱ. I은 수권이다.&lt;br&gt;ㄴ. ㉠은 II의 탄소량을 증가시키는 요인이다.&lt;br&gt;ㄷ. '지진에 의해 해일이 발생한다'는 C에 해당한다.`,
 answer:&quot;④ ㄴ, ㄷ&quot;,
 explain:`I=기권, II=생물권으로 판단되어 &lt;b&gt;ㄱ('I은 수권') 틀림&lt;/b&gt;. ㉠(광합성)은 대기 중 이산화탄소를 흡수해 유기물로 합성하므로 II(생물권)의 탄소량을 &lt;b&gt;증가&lt;/b&gt;시키는 요인이다(&lt;b&gt;ㄴ 맞음&lt;/b&gt;). '지진에 의해 해일이 발생한다'는 지권-수권 상호작용(C)에 해당한다(&lt;b&gt;ㄷ 맞음&lt;/b&gt;).`,
 tip:&quot;권역 간 상호작용은 '무엇이 무엇에 영향을 주는가' 화살표 방향을 정확히 따라가는 것이 핵심.&quot;},

{no:&quot;15&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 지구시스템에서 일어나는 탄소 순환의 일부를 나타낸 것이다. (광합성, 호흡, 화석연료 연소(A), 용해(B), 방출)&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.6점]&lt;/p&gt;`,
 choices:`ㄱ. A 과정은 지구 온난화의 원인이다.&lt;br&gt;ㄴ. B를 통해 이동한 탄소의 일부는 탄산 이온이 된다.&lt;br&gt;ㄷ. 탄소가 순환할 때 에너지의 흐름은 일어나지 않는다.`,
 answer:&quot;③ ㄱ, ㄷ&quot;,
 explain:`A(화석연료 연소)는 대기 중 CO₂를 방출하여 &lt;b&gt;지구온난화의 원인&lt;/b&gt;이 된다(ㄱ 맞음). 탄소가 순환하는 과정 자체는 물질의 이동이며, 별도의 에너지 흐름을 동반하지 않는 것으로 본다(ㄷ 맞음). B(용해)로 이동한 탄소가 탄산 이온이 된다는 ㄴ은 정답표 기준 틀린 설명으로 처리된다.`,
 tip:&quot;탄소 순환은 물질의 이동이지만, 생명활동(광합성·호흡)이 함께 일어나므로 에너지 흐름도 동반된다.&quot;},

{no:&quot;16&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 판의 경계에 위치한 지점 A~C를 나타낸 것이다(유라시아판·태평양판·북아메리카판·나스카판·남아메리카판·인도-오스트레일리아판).&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.5점]&lt;/p&gt;`,
 choices:`ㄱ. A에서 해양판이 소멸한다.&lt;br&gt;ㄴ. B에서 천발지진이 일어난다.&lt;br&gt;ㄷ. C의 하부에서 맨틀 대류가 상승한다.`,
 answer:&quot;⑤ ㄱ, ㄴ, ㄷ&quot;,
 explain:`A: 해양판 섭입·소멸(ㄱ). B: 변환단층 부근 천발지진(ㄴ). C: 발산경계, 맨틀 대류 상승(ㄷ). 모두 맞음.`,
 tip:&quot;판 경계 지도 문제는 화살표 방향(멀어짐=발산, 가까워짐=수렴, 어긋남=보존)을 먼저 파악하자.&quot;},

{no:&quot;17&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 해수의 깊이에 따른 수온 변화를 나타낸 것이다(A, B, C 구간).&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.4점]&lt;/p&gt;`,
 diagram:`&lt;svg viewBox=&quot;0 0 320 220&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
   &lt;line x1=&quot;100&quot; y1=&quot;20&quot; x2=&quot;100&quot; y2=&quot;200&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;line x1=&quot;40&quot; y1=&quot;20&quot; x2=&quot;280&quot; y2=&quot;20&quot; stroke=&quot;#dfe6e9&quot; stroke-width=&quot;2&quot;/&gt;
   &lt;path d=&quot;M260,20 L260,55 L120,140 L110,200&quot; fill=&quot;none&quot; stroke=&quot;#74B9FF&quot; stroke-width=&quot;3&quot;/&gt;
   &lt;text x=&quot;262&quot; y=&quot;30&quot; fill=&quot;#74B9FF&quot; font-size=&quot;12&quot;&gt;A&lt;/text&gt;
   &lt;text x=&quot;180&quot; y=&quot;100&quot; fill=&quot;#FDCB6E&quot; font-size=&quot;12&quot;&gt;B&lt;/text&gt;
   &lt;text x=&quot;95&quot; y=&quot;180&quot; fill=&quot;#FF7675&quot; font-size=&quot;12&quot;&gt;C&lt;/text&gt;
   &lt;text x=&quot;270&quot; y=&quot;14&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;수온&lt;/text&gt;
   &lt;text x=&quot;60&quot; y=&quot;215&quot; fill=&quot;#fff&quot; font-size=&quot;11&quot;&gt;깊이↓&lt;/text&gt;
 &lt;/svg&gt;`,
 choices:`ㄱ. A층은 혼합층으로 중위도에서 가장 두껍게 형성된다.&lt;br&gt;ㄴ. B층은 수온약층으로 상하 물질교환이 활발하게 이루어진다.&lt;br&gt;ㄷ. A와 C가 수온이 일정한 이유는 동일하다.`,
 answer:&quot;① ㄱ&quot;,
 explain:`A층(혼합층): 바람이 강한 중위도에서 가장 두껍게 형성(ㄱ 맞음). B층(수온약층)은 밀도차로 안정해 상하 물질교환이 &lt;b&gt;활발하지 않음&lt;/b&gt;(ㄴ 틀림). A와 C(심해층)는 둘 다 수온이 일정하지만 이유가 다름(A=가열+혼합, C=태양에너지 거의 도달 안 함) → ㄷ 틀림.`,
 tip:&quot;혼합층-수온약층-심해층은 깊이별 온도변화 기울기로 즉시 구분! 수온약층=‘안정층’ 키워드로 기억.&quot;},

{no:&quot;18&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 지구시스템에서 일어나는 물의 순환을 나타낸 것이다. (단위: ×10³km³/년, 해양 증발320·강수284, 육지 증발60·강수96, A로 표시된 흐름)&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [4.2점]&lt;/p&gt;`,
 choices:`ㄱ. 해양에서는 강수량이 증발량보다 많다.&lt;br&gt;ㄴ. A에 의해 수권이 지권을 변화시킨다.&lt;br&gt;ㄷ. 지구 전체에서의 총 증발량과 총 강수량은 같다.`,
 answer:&quot;④ ㄴ, ㄷ&quot;,
 explain:`해양에서는 증발(320)이 강수(284)보다 많으므로 '해양에서 강수량이 증발량보다 많다'는 &lt;b&gt;ㄱ 틀림&lt;/b&gt;. A(지하수→하천수 등의 흐름)에 의해 수권이 지권을 침식 등으로 변화시킨다(&lt;b&gt;ㄴ 맞음&lt;/b&gt;). 지구 전체의 총증발량(380)과 총강수량(380)은 같다(&lt;b&gt;ㄷ 맞음&lt;/b&gt;).`,
 tip:&quot;숫자를 영역별로 더해 비교! 지구 전체는 증발=강수이지만 해양/육지는 다르다는 점 기억.&quot;},

{no:&quot;19&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림은 지구 시스템의 에너지원을 나타낸 것이다.&lt;br&gt;태양 에너지 1.7×10¹⁷W, 조력 에너지 2.7×10¹²W, 지구 내부 에너지 4.4×10¹³W&lt;/p&gt;&lt;p&gt;옳은 것만을 보기에서 고르시오. [3.7점]&lt;/p&gt;`,
 choices:`ㄱ. 화산 분출은 지구 내부 에너지에 의해 일어난다.&lt;br&gt;ㄴ. 조력 에너지는 해안 지형의 변화를 일으키고 생태계에 영향을 준다.&lt;br&gt;ㄷ. 에너지원의 크기는 태양 에너지 &gt; 지구 내부 에너지 &gt; 조력 에너지 순이다.`,
 answer:&quot;⑤ ㄱ, ㄴ, ㄷ&quot;,
 explain:`화산=지구내부에너지(ㄱ). 조력에너지=해안지형 변화 및 생태계 영향(ㄴ). 크기순: 태양&gt;지구내부&gt;조력(ㄷ). 모두 맞음.`,
 tip:&quot;지구시스템 3대 에너지원의 크기 순서(태양&gt;지구내부&gt;조력)는 숫자와 함께 통째로 암기!&quot;},

{no:&quot;20&quot;, area:&quot;earth&quot;,
 q:`&lt;p&gt;그림 (가)~(다)는 서로 다른 판의 경계를 모식적으로 나타낸 것이다.&lt;br&gt;(가) 해양판-해양판  (나) 해양판-대륙판  (다) 대륙판-대륙판&lt;/p&gt;&lt;p&gt;(가)~(다)에서 공통으로 일어나는 지각 변동을 보기에서 고르시오. [3.9점]&lt;/p&gt;`,
 choices:`ㄱ. 천발 지진&lt;br&gt;ㄴ. 화산 활동&lt;br&gt;ㄷ. 습곡 산맥 형성`,
 answer:&quot;③ ㄱ, ㄴ&quot;,
 explain:`(가)~(다)는 모두 판이 서로 가까워지는 수렴형 경계이다. 판이 섭입 또는 충돌하는 과정에서 &lt;b&gt;천발지진(ㄱ)&lt;/b&gt;과 &lt;b&gt;화산 활동(ㄴ)&lt;/b&gt;이 공통적으로 나타난다. 습곡 산맥 형성은 대륙판-대륙판이 충돌하는 (다)에서만 뚜렷하게 나타나므로 공통점으로 보기 어렵다(ㄷ 틀림).`,
 tip:&quot;판 경계 유형별로 '공통으로 나타나는 것'과 '특정 경계에서만 나타나는 것'을 표로 정리해두자.&quot;},

{no:&quot;서술형1&quot;, area:&quot;essay&quot;,
 q:`&lt;p&gt;다음은 과산화수소를 분해하는 효소인 카탈레이스에 의한 반응을 나타낸 것이다.&lt;br&gt;과산화수소 →(카탈레이스)→ 물 + ㉠&lt;/p&gt;&lt;p&gt;㉠에 해당하는 물질을 쓰고, 효소의 역할을 서술하시오. (단, 효소의 역할은 '활성화 에너지', '반응 속도'와 관련하여 서술할 것) [7점]&lt;/p&gt;`,
 choices:``,
 answer:&quot;㉠ = 산소(O₂)&quot;,
 explain:`효소의 역할: 카탈레이스와 같은 효소는 &lt;b&gt;활성화 에너지를 낮추어&lt;/b&gt; 반응이 더 쉽게 일어나게 함으로써 &lt;b&gt;반응 속도를 증가&lt;/b&gt;시킨다.&lt;br&gt;[채점기준] '활성화 에너지를 낮춘다'(2점) + '반응 속도를 증가시킨다'(2점) 키워드 필수.`,
 tip:&quot;효소 서술형은 '활성화 에너지 ↓' → '반응 속도 ↑'의 인과관계를 한 문장으로 연결해서 쓰자.&quot;},

{no:&quot;서술형2&quot;, area:&quot;essay&quot;,
 q:`&lt;p&gt;그림은 기권의 층상구조를 나타낸 것이다(고도 0~150km, A~D층, 11km·50km·80km 경계).&lt;/p&gt;&lt;p&gt;B층과 D층의 명칭을 적고, 고도가 상승할수록 온도가 상승하는 원인에 대해 각각 서술하시오. [6점]&lt;/p&gt;`,
 choices:``,
 answer:&quot;B층 = 성층권 / D층 = 열권&quot;,
 explain:`&lt;b&gt;성층권&lt;/b&gt;: 오존층이 존재하여 태양으로부터 오는 자외선을 흡수·차단하기 때문에 고도가 높아질수록 온도가 상승한다.&lt;br&gt;&lt;b&gt;열권&lt;/b&gt;: 공기(대기)가 매우 희박하여, 적은 수의 입자가 태양에너지를 받아 활발하게 운동하면서 온도가 상승한다.`,
 tip:&quot;성층권='오존층+자외선 흡수', 열권='희박한 대기+입자 운동' 키워드로 암기카드를 만들어두자.&quot;},

{no:&quot;서술형3&quot;, area:&quot;essay&quot;,
 q:`&lt;p&gt;그림과 같이 수평면에서 운동량의 크기가 p인 물체 A, C가 정지해 있는 물체 B, D에 각각 충돌한 후 A는 오른쪽으로, C는 왼쪽으로 운동한다. 충돌 후 운동량의 크기는 A가 C의 2/3배이고, 물체가 받은 충격량의 크기는 B가 D의 2/3배이다.&lt;/p&gt;&lt;p&gt;충돌 후 D의 운동량의 크기 p_D를 풀이과정과 함께 구하시오. [7점]&lt;/p&gt;`,
 choices:``,
 answer:&quot;p_D = (5/4)p&quot;,
 explain:`① 운동량 보존: p + 0 = p_A + p_B = (2/3)p_C + (2/3)p_D&lt;br&gt;② C는 충돌 후 왼쪽 이동: p + 0 = −p_C + p_D&lt;br&gt;①②를 연립:&lt;br&gt;(1) p = (2/3)p_C + (2/3)p_D&lt;br&gt;(2) p = −p_C + p_D → ×(2/3): (2/3)p = −(2/3)p_C + (2/3)p_D&lt;br&gt;(1)+위 식: (5/3)p = (4/3)p_D&lt;br&gt;∴ &lt;b&gt;p_D = (5/4)p&lt;/b&gt;`,
 tip:&quot;두 충돌(A-B, C-D)에 각각 운동량 보존을 세우고, 비율 조건을 식으로 변환해 연립방정식으로 풀자. 방향(부호) 설정이 가장 흔한 실수 포인트!&quot;}
];

let idx = 0;
let flipped = false;

const card = document.getElementById('card');
const frontFace = document.getElementById('frontFace');
const backFace = document.getElementById('backFace');
const progressFill = document.getElementById('progressFill');
const progressText = document.getElementById('progressText');
const jumpRow = document.getElementById('jumpRow');

function render(){
  const item = cards[idx];
  const a = AREA[item.area];
  frontFace.innerHTML = `
    &lt;span class=&quot;badge ${a.cls}&quot;&gt;${a.label}&lt;/span&gt;
    &lt;div class=&quot;qnum&quot;&gt;문항 ${item.no}&lt;/div&gt;
    &lt;div class=&quot;qtext&quot;&gt;${item.q}${item.diagram ? '&lt;div class=&quot;diagram&quot;&gt;'+item.diagram+'&lt;/div&gt;' : ''}${item.choices ? '&lt;div class=&quot;choices&quot;&gt;'+item.choices+'&lt;/div&gt;' : ''}&lt;/div&gt;
    &lt;div class=&quot;hint&quot;&gt;  클릭해서 정답 보기&lt;/div&gt;
  `;
  backFace.innerHTML = `
    &lt;span class=&quot;badge ${a.cls}&quot;&gt;${a.label} · 정답&lt;/span&gt;
    &lt;div class=&quot;answer-line&quot;&gt;✅ ${item.answer}&lt;/div&gt;
    &lt;div class=&quot;explain&quot;&gt;${item.explain}&lt;/div&gt;
    &lt;div class=&quot;tip&quot;&gt;▶ 시험포인트: ${item.tip}&lt;/div&gt;
  `;
  card.classList.remove('flipped');
  flipped = false;
  progressFill.style.width = ((idx+1)/cards.length*100) + '%';
  progressText.textContent = (idx+1) + ' / ' + cards.length + '  (' + item.no + '번)';
  renderJump();
}

function renderJump(){
  jumpRow.innerHTML = '';
  cards.forEach((c,i)=&gt;{
    const b = document.createElement('button');
    b.className = 'jump-btn jump-btn-el' + (i===idx ? ' current' : '');
    b.textContent = c.no.replace('서술형','S');
    b.onclick = (e)=&gt;{ e.stopPropagation(); idx=i; render(); };
    jumpRow.appendChild(b);
  });
}

card.addEventListener('click', ()=&gt;{
  flipped = !flipped;
  card.classList.toggle('flipped', flipped);
});

document.getElementById('flipBtn').onclick = ()=&gt;{
  flipped = !flipped;
  card.classList.toggle('flipped', flipped);
};
document.getElementById('prevBtn').onclick = ()=&gt;{
  idx = (idx - 1 + cards.length) % cards.length;
  render();
};
document.getElementById('nextBtn').onclick = ()=&gt;{
  idx = (idx + 1) % cards.length;
  render();
};

document.addEventListener('keydown', (e)=&gt;{
  if(e.key === 'ArrowLeft') document.getElementById('prevBtn').click();
  if(e.key === 'ArrowRight') document.getElementById('nextBtn').click();
  if(e.key === ' ') { e.preventDefault(); document.getElementById('flipBtn').click(); }
});

render();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>고등영어-1학년/경신고</category>
      <category>경신고</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/389</guid>
      <comments>https://ymedu.tistory.com/389#entry389comment</comments>
      <pubDate>Tue, 30 Jun 2026 15:12:52 +0900</pubDate>
    </item>
    <item>
      <title>풍문고 성적분석</title>
      <link>https://ymedu.tistory.com/388</link>
      <description>&lt;!doctype html&gt;&lt;html lang=&quot;ko&quot;&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;&lt;title&gt;풍문고 학업성취 분석 카드&lt;/title&gt;&lt;style&gt;
:root{--navy:#15294b;--blue:#2d6cdf;--green:#14804a;--red:#d43f3a;--ink:#1f2937;--muted:#6b7280;--line:#d9e2ef}*{box-sizing:border-box}body{margin:0;background:linear-gradient(180deg,#f4f8ff,#fffaf3);font-family:system-ui,-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,&quot;Noto Sans KR&quot;,sans-serif;color:var(--ink);word-break:keep-all}.page{max-width:480px;margin:0 auto;padding:14px 12px 36px}.school-list-tab{display:flex;justify-content:center;margin:0 0 10px;padding:9px 12px;border-radius:999px;background:var(--navy);color:#fff;text-decoration:none;font-size:13px;font-weight:900}.school-list-tab:after{content:&quot;↗&quot;;margin-left:6px}.flip-card{perspective:1400px;margin:14px 0}.card-inner{position:relative;width:100%;min-height:640px;transform-style:preserve-3d;transition:transform .55s}.flip-card.flipped .card-inner{transform:rotateY(180deg)}.face{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(21,41,75,.12);border-radius:28px;padding:26px 24px;background:rgba(255,255,255,.94);box-shadow:0 18px 44px rgba(21,41,75,.12);overflow:hidden;backface-visibility:hidden}.back{transform:rotateY(180deg);background:#fff}.cover{background:linear-gradient(145deg,#15305d,#2d6cdf 58%,#88b8ff);color:#fff}.goodface{background:linear-gradient(145deg,#f0fff6,#fff)}.midface{background:linear-gradient(145deg,#fff7e8,#fff)}.riskface{background:linear-gradient(145deg,#fff1f1,#fff)}.cover h1,.cover .no,.cover .tap{color:white}.kicker{display:flex;justify-content:space-between;gap:10px;margin-bottom:14px}.no{font-weight:900;color:var(--blue)}.tap{font-size:12px;color:var(--muted);font-weight:800}.tagrow{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.tag{font-size:12px;font-weight:800;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:white;color:var(--blue)}.cover .tag{border-color:rgba(255,255,255,.32);color:white;background:rgba(255,255,255,.12)}h1,h2{margin:0;line-height:1.08;letter-spacing:-.06em}h1{font-size:38px}h2{font-size:30px;color:var(--navy)}.lead{font-size:17px;line-height:1.55;color:#334155;margin:14px 0 0}.cover .lead{color:rgba(255,255,255,.9)}p{line-height:1.62}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0}.stat{border:1px solid var(--line);border-radius:18px;padding:14px;background:rgba(255,255,255,.72)}.label{font-size:12px;color:var(--muted);font-weight:800}.val{font-size:23px;font-weight:900;color:var(--navy)}.caption{font-size:11px;color:#7b8494}.rows{display:grid;gap:9px;margin:12px 0}.row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;border-bottom:1px dashed #d7dee9;padding-bottom:8px}.row b{color:var(--navy)}.row span:last-child{font-weight:900;color:var(--navy);text-align:right;max-width:62%;line-height:1.45}.quote{border-left:4px solid var(--blue);padding:12px 14px;background:#eef6ff;border-radius:0 14px 14px 0;margin:12px 0}.warning{border-left-color:var(--red);background:#fff0f0}.ok{border-left-color:var(--green);background:#edf9f2}@media(max-width:430px){.page{padding:12px 10px 94px}.flip-card{display:none;margin:0}.flip-card.is-active{display:block}.flip-card,.card-inner{min-height:calc(100svh - 132px)}.face{padding:22px 20px;border-radius:24px;gap:12px}h1{font-size:31px}h2{font-size:26px}.lead{font-size:16px}.val{font-size:21px}.rows{font-size:14px}.mobile-pager{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:center;gap:8px;padding:10px 12px 14px;background:linear-gradient(180deg,rgba(244,248,255,.08),rgba(244,248,255,.96) 34%,#f4f8ff)}.mobile-pager button{border:0;border-radius:999px;padding:12px 16px;font-weight:900;background:var(--navy);color:#fff}.mobile-pager button:disabled{opacity:.38}.page-count{min-width:62px;text-align:center;font-size:13px;font-weight:900;color:var(--navy);padding-top:12px}}@media(min-width:431px){.mobile-pager{display:none}}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;main class=&quot;page&quot;&gt;&lt;a class=&quot;school-list-tab&quot; href=&quot;https://ymedu.tistory.com/category/%EA%B3%A0%EA%B5%90%20%EB%82%B4%EC%8B%A0%EB%B6%84%EC%84%9D/%EA%B0%95%EB%82%A8%EA%B5%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;강남구 내신분석 보기&lt;/a&gt;&lt;div id=&quot;deck&quot;&gt;&lt;/div&gt;&lt;/main&gt;&lt;div class=&quot;mobile-pager&quot;&gt;&lt;button class=&quot;prev-card&quot;&gt;이전 카드&lt;/button&gt;&lt;span class=&quot;page-count&quot;&gt;1 / 11&lt;/span&gt;&lt;button class=&quot;next-card&quot;&gt;다음 카드&lt;/button&gt;&lt;/div&gt;&lt;script&gt;
const school={name:&quot;풍문고&quot;,district:&quot;강남구 일반고&quot;};
const cards=[
[&quot;cover&quot;,&quot;CARD 01&quot;,&quot;풍문고&lt;br&gt;학업성취 분석 카드&quot;,&quot;대형 학교와 높은 기타 비율이 강점입니다. A비율은 넓은 과목이 많지만 평균과 고3 영어 이탈을 함께 봐야 합니다.&quot;,[[&quot;졸업생&quot;,&quot;293명&quot;],[&quot;기타&quot;,&quot;140명 · 47.8%&quot;],[&quot;1학년&quot;,&quot;330명&quot;],[&quot;1등급 추정&quot;,&quot;약 33명&quot;]],&quot;2026년 4월 공시, 2025학년도 성취도 기준&quot;,&quot;종합 결론&quot;,&quot;A권은 넓지만 평균·D/E까지 같이 봐야 한다&quot;,&quot;풍문고는 A비율이 넓은 과목이 많아 겉으로는 내신이 좋아 보일 수 있습니다. 하지만 평균이 낮거나 고3 영어Ⅱ처럼 E비율이 높은 과목은 별도 관리가 필요합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 02&quot;,&quot;규모와 진로 현황&quot;,&quot;졸업생 293명 중 기타 47.8%입니다. 정시·재수 준비층이 분명한 강남구 일반고입니다.&quot;,[[&quot;대학교&quot;,&quot;119명 · 40.6%&quot;],[&quot;전문대&quot;,&quot;34명 · 11.6%&quot;],[&quot;취업&quot;,&quot;0명&quot;],[&quot;기타&quot;,&quot;140명 · 47.8%&quot;]],&quot;&quot;,&quot;진로 해석&quot;,&quot;정시 분위기는 강하지만 전문대 비율도 본다&quot;,&quot;기타 비율은 긍정적입니다. 다만 전문대 비율이 10%를 넘어 학력 분포가 넓게 퍼져 있을 가능성도 함께 봐야 합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 03&quot;,&quot;고1 공통수학&quot;,&quot;공통수학 A비율은 35% 이상으로 넓고 E비율은 낮습니다.&quot;,[[&quot;공통수학1&quot;,&quot;평균 60.7 · A 35.4%&quot;,&quot;E 2.6%&quot;],[&quot;공통수학2&quot;,&quot;평균 61.5 · A 36.8%&quot;,&quot;E 1.3%&quot;],[&quot;1학년 규모&quot;,&quot;330명&quot;,&quot;1등급 약 33명&quot;]],&quot;&quot;,&quot;고1 해석&quot;,&quot;A권은 넓지만 평균은 낮다&quot;,&quot;A비율은 넓지만 평균은 60점대 초반입니다. 성취도 A 안에서도 1등급 경쟁은 다시 나뉘므로 점수대 관리가 필요합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 04&quot;,&quot;고2 수학Ⅰ·Ⅱ&quot;,&quot;2025년부터 수학Ⅰ·수학Ⅱ는 대수 성격으로 재구성됩니다. 풍문고는 A권이 넓은 편입니다.&quot;,[[&quot;수학Ⅰ&quot;,&quot;평균 60.9 · A 22.5%&quot;,&quot;E 14.6%&quot;],[&quot;수학Ⅱ&quot;,&quot;평균 61.5 · A 29.3%&quot;,&quot;E 16.2%&quot;],[&quot;2학년 규모&quot;,&quot;291명&quot;,&quot;1등급 약 29명&quot;]],&quot;&quot;,&quot;고2 해석&quot;,&quot;A는 넓지만 평균 낮음에 주의&quot;,&quot;A비율이 넓다고 방심하면 안 됩니다. 5등급제 1등급 추정은 상위 10%라 A 안에서도 최상위 점수 확보가 필요합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 05&quot;,&quot;확률과 통계&quot;,&quot;확통은 A비율이 넓지만 2학기 E비율이 21.9%로 올라갑니다.&quot;,[[&quot;2학년 1학기&quot;,&quot;평균 58.1 · A 30.0%&quot;,&quot;E 14.1%&quot;],[&quot;2학년 2학기&quot;,&quot;평균 56.7 · A 37.5%&quot;,&quot;E 21.9%&quot;],[&quot;판정&quot;,&quot;A권 넓음&quot;,&quot;평균 낮음&quot;]],&quot;&quot;,&quot;확통 해석&quot;,&quot;A 안 최상위 변별을 봐야 한다&quot;,&quot;A권이 넓은 학교일수록 1등급 추정 인원과 A인원 차이가 큽니다. 단순 A가 아니라 상위 10% 안착을 목표로 해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 06&quot;,&quot;미적분 주의&quot;,&quot;고3 미적분은 A비율이 줄고 E비율이 29.0%까지 올라갑니다.&quot;,[[&quot;3학년 1학기&quot;,&quot;평균 61.4 · A 17.9%&quot;,&quot;E 29.0%&quot;],[&quot;3학년 2학기&quot;,&quot;평균 45.8 · A 6.2%&quot;,&quot;E 22.1%&quot;],[&quot;전략&quot;,&quot;고2 겨울&quot;,&quot;미적분 누적&quot;]],&quot;&quot;,&quot;미적분 해석&quot;,&quot;고3 수학은 별도 관리가 필요하다&quot;,&quot;고1·고2 수학 A권이 넓어도 미적분에서는 격차가 커집니다. 이과 지망은 미적분을 미리 잡아야 합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 07&quot;,&quot;영어 A권 넓음&quot;,&quot;고1·고2 영어는 A비율이 매우 넓고 E비율이 낮습니다.&quot;,[[&quot;공통영어1&quot;,&quot;평균 69.1 · A 34.8%&quot;,&quot;E 0.7%&quot;],[&quot;공통영어2&quot;,&quot;평균 71.9 · A 42.1%&quot;,&quot;E 2.7%&quot;],[&quot;영어Ⅰ&quot;,&quot;A 36.0~43.4%&quot;,&quot;E 0.6~1.0%&quot;]],&quot;&quot;,&quot;영어 해석&quot;,&quot;초중반 영어는 강점 과목&quot;,&quot;고1·고2 영어는 내신 방어 과목이 될 수 있습니다. 다만 A가 넓으므로 최상위 변별은 서술형과 고난도 독해에서 갈립니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 08&quot;,&quot;고3 영어Ⅱ 위험&quot;,&quot;고3 영어Ⅱ는 평균이 크게 낮고 E비율이 47~50% 수준입니다.&quot;,[[&quot;영어Ⅱ 1학기&quot;,&quot;평균 47.6 · A 15.8%&quot;,&quot;E 47.3%&quot;],[&quot;영어Ⅱ 2학기&quot;,&quot;평균 38.7 · A 11.0%&quot;,&quot;E 49.8%&quot;],[&quot;해석&quot;,&quot;정시 집중&quot;,&quot;내신 이탈 가능&quot;]],&quot;&quot;,&quot;영어 해석&quot;,&quot;고3에서 영어를 놓치면 급락한다&quot;,&quot;고1·고2 영어가 좋다고 고3까지 자동으로 이어지지 않습니다. 수능 영어와 내신 서술형을 병행해야 합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 09&quot;,&quot;과탐 강점과 주의&quot;,&quot;물리Ⅰ·화학Ⅰ은 A권이 매우 넓습니다. 생명Ⅰ 2학기는 별도 주의가 필요합니다.&quot;,[[&quot;물리학Ⅰ&quot;,&quot;A 54.5~74.0%&quot;,&quot;E 0.0~6.5%&quot;],[&quot;화학Ⅰ&quot;,&quot;A 37.1~53.3%&quot;,&quot;2학기 E 26.7%&quot;],[&quot;생명과학Ⅰ 2학기&quot;,&quot;A 8.7%&quot;,&quot;E 36.9%&quot;]],&quot;&quot;,&quot;과탐 해석&quot;,&quot;과탐은 강점이지만 과목별 편차가 있다&quot;,&quot;물리·화학은 학종 소재로 활용하기 좋습니다. 생명과학은 2학기 이탈이 보여 과목 선택과 학습량을 함께 봐야 합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 10&quot;,&quot;수행평가·평가계획 확인&quot;,&quot;풍문고는 학년별 교수학습 및 평가운영 계획서 ZIP과 학업성적관리규정을 공개했습니다.&quot;,[[&quot;확인 자료&quot;,&quot;1·2·3학년 평가계획&quot;],[&quot;자료 형태&quot;,&quot;학년별 ZIP&quot;],[&quot;수학 체크&quot;,&quot;대수·확통·미적분&quot;],[&quot;학종 포인트&quot;,&quot;탐구형 수행 제목 확인&quot;]],&quot;&quot;,&quot;수행평가 해석&quot;,&quot;A권이 넓을수록 세특 깊이가 중요하다&quot;,&quot;수행평가 제목이 단순 활동이면 A를 받아도 학생부 경쟁력이 약할 수 있습니다. 데이터 분석, 실험 탐구, 논문 읽기, 자유주제 학술 탐구형 제목을 확인해야 합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 11&quot;,&quot;최종 전략&quot;,&quot;풍문고는 A비율이 넓은 과목이 많지만 1등급은 A 안에서 다시 경쟁합니다.&quot;,[[&quot;강점&quot;,&quot;기타 47.8%&quot;],[&quot;강점&quot;,&quot;고1·고2 영어&quot;],[&quot;주의&quot;,&quot;고3 영어Ⅱ&quot;],[&quot;전략&quot;,&quot;A 안 상위 10% 목표&quot;]],&quot;&quot;,&quot;마무리&quot;,&quot;A비율보다 1등급 추정 인원을 본다&quot;,&quot;풍문고는 내신 성취도 A가 넓어 보이는 학교입니다. 그러나 5등급제 1등급 추정은 상위 10%이므로, 평균·A비율·E비율을 함께 보고 최상위 점수대를 목표로 해야 합니다.&quot;]
];
function rows(items){return `&lt;div class=&quot;rows&quot;&gt;${items.map(r=&gt;`&lt;div class=&quot;row&quot;&gt;&lt;b&gt;${r[0]}&lt;/b&gt;&lt;span&gt;${r[1]}&lt;br&gt;${r[2]||&quot;&quot;}&lt;/span&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}function stats(items){return `&lt;div class=&quot;stat-grid&quot;&gt;${items.map(s=&gt;`&lt;div class=&quot;stat&quot;&gt;&lt;div class=&quot;label&quot;&gt;${s[0]}&lt;/div&gt;&lt;div class=&quot;val&quot;&gt;${s[1]}&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}
document.querySelector(&quot;#deck&quot;).innerHTML=cards.map(c=&gt;`&lt;div class=&quot;flip-card&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;card-inner&quot;&gt;&lt;section class=&quot;face ${c[0]}&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[1]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;탭해 뒤집기&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tagrow&quot;&gt;&lt;span class=&quot;tag&quot;&gt;${school.name}&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;${school.district}&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;${c[2]}&lt;/h1&gt;&lt;p class=&quot;lead&quot;&gt;${c[3]}&lt;/p&gt;&lt;/div&gt;${c[4][0].length===2?stats(c[4]):rows(c[4])}&lt;p class=&quot;caption&quot;&gt;${c[5]}&lt;/p&gt;&lt;/section&gt;&lt;section class=&quot;face back&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[6]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;다시 탭&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;${c[7]}&lt;/h2&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;div class=&quot;quote ${c[0]===&quot;riskface&quot;?&quot;warning&quot;:c[0]===&quot;goodface&quot;?&quot;ok&quot;:&quot;&quot;}&quot;&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;);
const cardEls=[...document.querySelectorAll('.flip-card')];let activeIndex=0;const prevBtn=document.querySelector('.prev-card'),nextBtn=document.querySelector('.next-card'),pageCount=document.querySelector('.page-count');const isMobile=()=&gt;matchMedia('(max-width:430px)').matches;function showCard(i){activeIndex=Math.max(0,Math.min(cardEls.length-1,i));cardEls.forEach((c,n)=&gt;{c.classList.toggle('is-active',n===activeIndex);if(n!==activeIndex)c.classList.remove('flipped')});pageCount.textContent=`${activeIndex+1} / ${cardEls.length}`;prevBtn.disabled=activeIndex===0;nextBtn.disabled=activeIndex===cardEls.length-1;if(isMobile())requestAnimationFrame(()=&gt;scrollTo({top:0,left:0,behavior:'smooth'}))}cardEls.forEach((c,n)=&gt;{if(n===0)c.classList.add('is-active');const f=()=&gt;{const x=scrollX,y=scrollY;c.classList.toggle('flipped');requestAnimationFrame(()=&gt;scrollTo(x,y))};c.addEventListener('click',e=&gt;{e.preventDefault();f()});c.addEventListener('keydown',e=&gt;{if(e.key==='Enter'||e.key===' '){e.preventDefault();f()}})});prevBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex-1)};nextBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex+1)};addEventListener('resize',()=&gt;showCard(activeIndex));showCard(0);
&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;</description>
      <category>고교 내신분석/강남구</category>
      <category>성적분석</category>
      <category>풍문고</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/388</guid>
      <comments>https://ymedu.tistory.com/388#entry388comment</comments>
      <pubDate>Mon, 29 Jun 2026 20:25:23 +0900</pubDate>
    </item>
    <item>
      <title>진선여고 성적분석</title>
      <link>https://ymedu.tistory.com/387</link>
      <description>&lt;!doctype html&gt;&lt;html lang=&quot;ko&quot;&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;&lt;title&gt;진선여고 학업성취 분석 카드&lt;/title&gt;&lt;style&gt;
:root{--navy:#15294b;--blue:#2d6cdf;--green:#14804a;--red:#d43f3a;--ink:#1f2937;--muted:#6b7280;--line:#d9e2ef}*{box-sizing:border-box}body{margin:0;background:linear-gradient(180deg,#f4f8ff,#fffaf3);font-family:system-ui,-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,&quot;Noto Sans KR&quot;,sans-serif;color:var(--ink);word-break:keep-all}.page{max-width:480px;margin:0 auto;padding:14px 12px 36px}.school-list-tab{display:flex;justify-content:center;margin:0 0 10px;padding:9px 12px;border-radius:999px;background:var(--navy);color:#fff;text-decoration:none;font-size:13px;font-weight:900}.school-list-tab:after{content:&quot;↗&quot;;margin-left:6px}.flip-card{perspective:1400px;margin:14px 0}.card-inner{position:relative;width:100%;min-height:640px;transform-style:preserve-3d;transition:transform .55s}.flip-card.flipped .card-inner{transform:rotateY(180deg)}.face{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(21,41,75,.12);border-radius:28px;padding:26px 24px;background:rgba(255,255,255,.94);box-shadow:0 18px 44px rgba(21,41,75,.12);overflow:hidden;backface-visibility:hidden}.back{transform:rotateY(180deg);background:#fff}.cover{background:linear-gradient(145deg,#15305d,#2d6cdf 58%,#88b8ff);color:#fff}.goodface{background:linear-gradient(145deg,#f0fff6,#fff)}.midface{background:linear-gradient(145deg,#fff7e8,#fff)}.riskface{background:linear-gradient(145deg,#fff1f1,#fff)}.cover h1,.cover .no,.cover .tap{color:white}.kicker{display:flex;justify-content:space-between;gap:10px;margin-bottom:14px}.no{font-weight:900;color:var(--blue)}.tap{font-size:12px;color:var(--muted);font-weight:800}.tagrow{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.tag{font-size:12px;font-weight:800;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:white;color:var(--blue)}.cover .tag{border-color:rgba(255,255,255,.32);color:white;background:rgba(255,255,255,.12)}h1,h2{margin:0;line-height:1.08;letter-spacing:-.06em}h1{font-size:38px}h2{font-size:30px;color:var(--navy)}.lead{font-size:17px;line-height:1.55;color:#334155;margin:14px 0 0}.cover .lead{color:rgba(255,255,255,.9)}p{line-height:1.62}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0}.stat{border:1px solid var(--line);border-radius:18px;padding:14px;background:rgba(255,255,255,.72)}.label{font-size:12px;color:var(--muted);font-weight:800}.val{font-size:23px;font-weight:900;color:var(--navy)}.caption{font-size:11px;color:#7b8494}.rows{display:grid;gap:9px;margin:12px 0}.row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;border-bottom:1px dashed #d7dee9;padding-bottom:8px}.row b{color:var(--navy)}.row span:last-child{font-weight:900;color:var(--navy);text-align:right;max-width:62%;line-height:1.45}.quote{border-left:4px solid var(--blue);padding:12px 14px;background:#eef6ff;border-radius:0 14px 14px 0;margin:12px 0}.warning{border-left-color:var(--red);background:#fff0f0}.ok{border-left-color:var(--green);background:#edf9f2}@media(max-width:430px){.page{padding:12px 10px 94px}.flip-card{display:none;margin:0}.flip-card.is-active{display:block}.flip-card,.card-inner{min-height:calc(100svh - 132px)}.face{padding:22px 20px;border-radius:24px;gap:12px}h1{font-size:31px}h2{font-size:26px}.lead{font-size:16px}.val{font-size:21px}.rows{font-size:14px}.mobile-pager{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:center;gap:8px;padding:10px 12px 14px;background:linear-gradient(180deg,rgba(244,248,255,.08),rgba(244,248,255,.96) 34%,#f4f8ff)}.mobile-pager button{border:0;border-radius:999px;padding:12px 16px;font-weight:900;background:var(--navy);color:#fff}.mobile-pager button:disabled{opacity:.38}.page-count{min-width:62px;text-align:center;font-size:13px;font-weight:900;color:var(--navy);padding-top:12px}}@media(min-width:431px){.mobile-pager{display:none}}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;main class=&quot;page&quot;&gt;&lt;a class=&quot;school-list-tab&quot; href=&quot;https://ymedu.tistory.com/category/%EA%B3%A0%EA%B5%90%20%EB%82%B4%EC%8B%A0%EB%B6%84%EC%84%9D/%EA%B0%95%EB%82%A8%EA%B5%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;강남구 내신분석 보기&lt;/a&gt;&lt;div id=&quot;deck&quot;&gt;&lt;/div&gt;&lt;/main&gt;&lt;div class=&quot;mobile-pager&quot;&gt;&lt;button class=&quot;prev-card&quot;&gt;이전 카드&lt;/button&gt;&lt;span class=&quot;page-count&quot;&gt;1 / 11&lt;/span&gt;&lt;button class=&quot;next-card&quot;&gt;다음 카드&lt;/button&gt;&lt;/div&gt;&lt;script&gt;
const school={name:&quot;진선여고&quot;,district:&quot;강남구 일반고&quot;};
const cards=[
[&quot;cover&quot;,&quot;CARD 01&quot;,&quot;진선여고&lt;br&gt;학업성취 분석 카드&quot;,&quot;대형 여고 규모와 진학 분위기는 좋습니다. 다만 수학 A권이 매우 좁고 영어·과탐 D+E 관리가 중요합니다.&quot;,[[&quot;졸업생&quot;,&quot;288명&quot;],[&quot;기타&quot;,&quot;124명 · 43.1%&quot;],[&quot;1학년&quot;,&quot;295명&quot;],[&quot;1등급 추정&quot;,&quot;약 30명&quot;]],&quot;2026년 4월 공시, 2025학년도 성취도 기준&quot;,&quot;종합 결론&quot;,&quot;고1 수학은 좋지만 고2부터 급격히 좁아진다&quot;,&quot;진선여고는 규모와 면학 분위기가 안정적입니다. 하지만 고2 수학Ⅰ A 0.7%, 수학Ⅱ A 3.4%, 고3 미적분 A 2.4%로 수학 상위권 경쟁이 매우 강합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 02&quot;,&quot;규모와 진로 현황&quot;,&quot;졸업생 288명 중 기타 43.1%입니다. 재수·정시 준비층이 충분히 있는 학교로 볼 수 있습니다.&quot;,[[&quot;대학교&quot;,&quot;154명 · 53.5%&quot;],[&quot;전문대&quot;,&quot;10명 · 3.5%&quot;],[&quot;취업&quot;,&quot;0명&quot;],[&quot;기타&quot;,&quot;124명 · 43.1%&quot;]],&quot;&quot;,&quot;진로 해석&quot;,&quot;진학 중심 분위기가 분명하다&quot;,&quot;전문대와 취업 비율이 낮고 기타 비율이 높습니다. 면학 분위기는 긍정적이지만, 상위권 내신 경쟁도 함께 봐야 합니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 03&quot;,&quot;고1 공통수학&quot;,&quot;공통수학 평균은 70점대 중후반으로 좋습니다. 다만 2학기 A비율은 6.6%로 좁아집니다.&quot;,[[&quot;공통수학1&quot;,&quot;평균 78.6 · A 17.3%&quot;,&quot;E 7.5%&quot;],[&quot;공통수학2&quot;,&quot;평균 75.5 · A 6.6%&quot;,&quot;E 13.6%&quot;],[&quot;1학년 규모&quot;,&quot;295명&quot;,&quot;1등급 약 30명&quot;]],&quot;&quot;,&quot;고1 해석&quot;,&quot;초반 성취는 좋지만 A권은 좁아진다&quot;,&quot;평균은 높지만 공통수학2 A비율이 10%보다 낮습니다. 상위권은 한 문제 차이로 갈릴 가능성이 큽니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 04&quot;,&quot;고2 수학Ⅰ·Ⅱ&quot;,&quot;2025년부터 수학Ⅰ·수학Ⅱ는 대수 성격으로 재구성됩니다. 진선여고는 A권이 극단적으로 좁습니다.&quot;,[[&quot;수학Ⅰ&quot;,&quot;평균 70.2 · A 0.7%&quot;,&quot;E 14.6%&quot;],[&quot;수학Ⅱ&quot;,&quot;평균 71.7 · A 3.4%&quot;,&quot;E 16.4%&quot;],[&quot;2학년 규모&quot;,&quot;285명&quot;,&quot;1등급 약 29명&quot;]],&quot;&quot;,&quot;고2 해석&quot;,&quot;A가 1등급보다 훨씬 좁다&quot;,&quot;수학Ⅰ A 0.7%는 거의 최상위 소수만 A를 받는 구조입니다. 고2 이전에 대수 단원을 완성하지 않으면 등급 방어가 어렵습니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 05&quot;,&quot;확률과 통계&quot;,&quot;확통은 2학기 E비율이 36.4%로 올라갑니다.&quot;,[[&quot;2학년 1학기&quot;,&quot;평균 71.6 · A 14.7%&quot;,&quot;E 23.0%&quot;],[&quot;2학년 2학기&quot;,&quot;평균 65.0 · A 5.7%&quot;,&quot;E 36.4%&quot;],[&quot;판정&quot;,&quot;E비율 높음&quot;,&quot;A권 좁음&quot;]],&quot;&quot;,&quot;확통 해석&quot;,&quot;조건 해석에서 하위권 이탈이 생긴다&quot;,&quot;확률과 통계는 단원별 개념이 끊기면 회복이 어렵습니다. 고2 때 주 1회 이상 누적 복습이 필요합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 06&quot;,&quot;미적분 초위험&quot;,&quot;고3 미적분은 A비율이 2.4%, 2학기에는 0.5%까지 줄어듭니다.&quot;,[[&quot;3학년 1학기&quot;,&quot;평균 56.8 · A 2.4%&quot;,&quot;E 53.1%&quot;],[&quot;3학년 2학기&quot;,&quot;평균 49.3 · A 0.5%&quot;,&quot;E 65.6%&quot;],[&quot;전략&quot;,&quot;고2 겨울&quot;,&quot;미적분 선행 필수&quot;]],&quot;&quot;,&quot;미적분 해석&quot;,&quot;의치공 지망은 가장 먼저 대비해야 한다&quot;,&quot;미적분은 포기자와 최상위권이 동시에 나타나는 과목입니다. 개념 이해, 계산 속도, 고난도 적용을 모두 준비해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 07&quot;,&quot;영어 D+E 주의&quot;,&quot;영어는 전 학년에 걸쳐 E비율이 높습니다. 특히 고2와 고3에서 정시 집중층과 이탈층이 갈립니다.&quot;,[[&quot;공통영어1&quot;,&quot;평균 71.8 · A 16.0%&quot;,&quot;E 24.5%&quot;],[&quot;영어Ⅰ&quot;,&quot;평균 71.2 · A 21.7%&quot;,&quot;E 34.6%&quot;],[&quot;영어Ⅱ&quot;,&quot;평균 58.3 · A 12.5%&quot;,&quot;E 55.5%&quot;]],&quot;&quot;,&quot;영어 해석&quot;,&quot;영어를 놓치면 평균을 크게 낮춘다&quot;,&quot;영어는 수학보다 회복이 쉽다고 생각하기 쉽지만, 진선여고 자료에서는 E비율이 높습니다. 독해 루틴을 꾸준히 유지해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 08&quot;,&quot;과탐Ⅰ 이탈&quot;,&quot;물리Ⅰ·화학Ⅰ·생명Ⅰ·지구Ⅰ 일부 학기에서 E비율이 30% 이상입니다.&quot;,[[&quot;물리학Ⅰ 2학기&quot;,&quot;평균 66.8 · A 7.9%&quot;,&quot;E 38.1%&quot;],[&quot;화학Ⅰ 2학기&quot;,&quot;평균 68.4 · A 15.3%&quot;,&quot;E 39.2%&quot;],[&quot;지구과학Ⅰ 2학기&quot;,&quot;평균 68.0 · A 19.7%&quot;,&quot;E 34.1%&quot;]],&quot;&quot;,&quot;과탐 해석&quot;,&quot;2학기 과탐 관리가 관건&quot;,&quot;과탐은 선택과목이라 학생 간 격차가 더 크게 보입니다. 개념 암기보다 실험·자료 해석형 문제를 꾸준히 훈련해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 09&quot;,&quot;D·E 관리 포인트&quot;,&quot;진선여고는 고2 이후 수학·영어·과탐에서 하위권 이탈이 평균을 낮춥니다.&quot;,[[&quot;수학Ⅰ&quot;,&quot;A 0.7%&quot;],[&quot;미적분&quot;,&quot;E 53.1%&quot;],[&quot;영어Ⅱ&quot;,&quot;E 55.5%&quot;],[&quot;과탐Ⅰ&quot;,&quot;E 30%대 다수&quot;]],&quot;&quot;,&quot;전략 해석&quot;,&quot;고2 진입 전 공부량을 늘려야 한다&quot;,&quot;수학은 포기자가 많이 나오는 과목입니다. 고2 때 공부량을 줄이면 3학년 미적분과 영어Ⅱ에서 회복이 매우 어렵습니다.&quot;],
[&quot;midface&quot;,&quot;CARD 10&quot;,&quot;수행평가·평가계획 확인&quot;,&quot;진선여고는 평가계획서 전체본과 학년별 교수학습 운영계획을 공개했습니다.&quot;,[[&quot;확인 자료&quot;,&quot;평가계획서 전체&quot;],[&quot;학년 자료&quot;,&quot;1·2·3학년 운영계획&quot;],[&quot;수학 체크&quot;,&quot;대수·확통·미적분&quot;],[&quot;학종 포인트&quot;,&quot;수행평가 제목 확인&quot;]],&quot;&quot;,&quot;수행평가 해석&quot;,&quot;학종은 제목의 깊이가 중요하다&quot;,&quot;대학은 수행평가 제목까지 봅니다. 단순 글쓰기보다 데이터 분석 발표, 실험 탐구, 논문 읽기, 자유주제 학술 탐구처럼 전공 적합성이 보이는 활동이 좋습니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 11&quot;,&quot;최종 전략&quot;,&quot;진선여고는 규모와 진학 분위기가 좋지만, 수학 A권이 매우 좁아 조기 대비가 필요합니다.&quot;,[[&quot;강점&quot;,&quot;기타 43.1%&quot;],[&quot;강점&quot;,&quot;고1 수학 평균&quot;],[&quot;주의&quot;,&quot;고2 수학 A 극소&quot;],[&quot;전략&quot;,&quot;고2 전 대수 완성&quot;]],&quot;&quot;,&quot;마무리&quot;,&quot;상위권은 고1 때부터 만들어진다&quot;,&quot;진선여고에서는 고1 성취가 좋아도 고2 수학에서 바로 좁아집니다. 고2·고3으로 올라갈수록 수학과 영어를 포기하지 않는 것이 가장 큰 전략입니다.&quot;]
];
function rows(items){return `&lt;div class=&quot;rows&quot;&gt;${items.map(r=&gt;`&lt;div class=&quot;row&quot;&gt;&lt;b&gt;${r[0]}&lt;/b&gt;&lt;span&gt;${r[1]}&lt;br&gt;${r[2]||&quot;&quot;}&lt;/span&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}function stats(items){return `&lt;div class=&quot;stat-grid&quot;&gt;${items.map(s=&gt;`&lt;div class=&quot;stat&quot;&gt;&lt;div class=&quot;label&quot;&gt;${s[0]}&lt;/div&gt;&lt;div class=&quot;val&quot;&gt;${s[1]}&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}
document.querySelector(&quot;#deck&quot;).innerHTML=cards.map(c=&gt;`&lt;div class=&quot;flip-card&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;card-inner&quot;&gt;&lt;section class=&quot;face ${c[0]}&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[1]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;탭해 뒤집기&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tagrow&quot;&gt;&lt;span class=&quot;tag&quot;&gt;${school.name}&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;${school.district}&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;${c[2]}&lt;/h1&gt;&lt;p class=&quot;lead&quot;&gt;${c[3]}&lt;/p&gt;&lt;/div&gt;${c[4][0].length===2?stats(c[4]):rows(c[4])}&lt;p class=&quot;caption&quot;&gt;${c[5]}&lt;/p&gt;&lt;/section&gt;&lt;section class=&quot;face back&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[6]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;다시 탭&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;${c[7]}&lt;/h2&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;div class=&quot;quote ${c[0]===&quot;riskface&quot;?&quot;warning&quot;:c[0]===&quot;goodface&quot;?&quot;ok&quot;:&quot;&quot;}&quot;&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;);
const cardEls=[...document.querySelectorAll('.flip-card')];let activeIndex=0;const prevBtn=document.querySelector('.prev-card'),nextBtn=document.querySelector('.next-card'),pageCount=document.querySelector('.page-count');const isMobile=()=&gt;matchMedia('(max-width:430px)').matches;function showCard(i){activeIndex=Math.max(0,Math.min(cardEls.length-1,i));cardEls.forEach((c,n)=&gt;{c.classList.toggle('is-active',n===activeIndex);if(n!==activeIndex)c.classList.remove('flipped')});pageCount.textContent=`${activeIndex+1} / ${cardEls.length}`;prevBtn.disabled=activeIndex===0;nextBtn.disabled=activeIndex===cardEls.length-1;if(isMobile())requestAnimationFrame(()=&gt;scrollTo({top:0,left:0,behavior:'smooth'}))}cardEls.forEach((c,n)=&gt;{if(n===0)c.classList.add('is-active');const f=()=&gt;{const x=scrollX,y=scrollY;c.classList.toggle('flipped');requestAnimationFrame(()=&gt;scrollTo(x,y))};c.addEventListener('click',e=&gt;{e.preventDefault();f()});c.addEventListener('keydown',e=&gt;{if(e.key==='Enter'||e.key===' '){e.preventDefault();f()}})});prevBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex-1)};nextBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex+1)};addEventListener('resize',()=&gt;showCard(activeIndex));showCard(0);
&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;</description>
      <category>고교 내신분석/강남구</category>
      <category>성적분석</category>
      <category>진선여고</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/387</guid>
      <comments>https://ymedu.tistory.com/387#entry387comment</comments>
      <pubDate>Mon, 29 Jun 2026 20:21:05 +0900</pubDate>
    </item>
    <item>
      <title>중대부고 성적분석</title>
      <link>https://ymedu.tistory.com/386</link>
      <description>&lt;!doctype html&gt;&lt;html lang=&quot;ko&quot;&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;&lt;title&gt;중대부고 학업성취 분석 카드&lt;/title&gt;&lt;style&gt;
:root{--navy:#15294b;--blue:#2d6cdf;--green:#14804a;--red:#d43f3a;--ink:#1f2937;--muted:#6b7280;--line:#d9e2ef}*{box-sizing:border-box}body{margin:0;background:linear-gradient(180deg,#f4f8ff,#fffaf3);font-family:system-ui,-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,&quot;Noto Sans KR&quot;,sans-serif;color:var(--ink);word-break:keep-all}.page{max-width:480px;margin:0 auto;padding:14px 12px 36px}.school-list-tab{display:flex;justify-content:center;margin:0 0 10px;padding:9px 12px;border-radius:999px;background:var(--navy);color:#fff;text-decoration:none;font-size:13px;font-weight:900}.school-list-tab:after{content:&quot;↗&quot;;margin-left:6px}.flip-card{perspective:1400px;margin:14px 0}.card-inner{position:relative;width:100%;min-height:640px;transform-style:preserve-3d;transition:transform .55s}.flip-card.flipped .card-inner{transform:rotateY(180deg)}.face{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:space-between;border:1px solid rgba(21,41,75,.12);border-radius:28px;padding:26px 24px;background:rgba(255,255,255,.94);box-shadow:0 18px 44px rgba(21,41,75,.12);overflow:hidden;backface-visibility:hidden}.back{transform:rotateY(180deg);background:#fff}.cover{background:linear-gradient(145deg,#15305d,#2d6cdf 58%,#88b8ff);color:#fff}.goodface{background:linear-gradient(145deg,#f0fff6,#fff)}.midface{background:linear-gradient(145deg,#fff7e8,#fff)}.riskface{background:linear-gradient(145deg,#fff1f1,#fff)}.cover h1,.cover .no,.cover .tap{color:white}.kicker{display:flex;justify-content:space-between;gap:10px;margin-bottom:14px}.no{font-weight:900;color:var(--blue)}.tap{font-size:12px;color:var(--muted);font-weight:800}.tagrow{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}.tag{font-size:12px;font-weight:800;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:white;color:var(--blue)}.cover .tag{border-color:rgba(255,255,255,.32);color:white;background:rgba(255,255,255,.12)}h1,h2{margin:0;line-height:1.08;letter-spacing:-.06em}h1{font-size:38px}h2{font-size:30px;color:var(--navy)}.lead{font-size:17px;line-height:1.55;color:#334155;margin:14px 0 0}.cover .lead{color:rgba(255,255,255,.9)}p{line-height:1.62}.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0}.stat{border:1px solid var(--line);border-radius:18px;padding:14px;background:rgba(255,255,255,.72)}.label{font-size:12px;color:var(--muted);font-weight:800}.val{font-size:23px;font-weight:900;color:var(--navy)}.caption{font-size:11px;color:#7b8494}.rows{display:grid;gap:9px;margin:12px 0}.row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;border-bottom:1px dashed #d7dee9;padding-bottom:8px}.row b{color:var(--navy)}.row span:last-child{font-weight:900;color:var(--navy);text-align:right;max-width:62%;line-height:1.45}.quote{border-left:4px solid var(--blue);padding:12px 14px;background:#eef6ff;border-radius:0 14px 14px 0;margin:12px 0}.warning{border-left-color:var(--red);background:#fff0f0}.ok{border-left-color:var(--green);background:#edf9f2}@media(max-width:430px){.page{padding:12px 10px 94px}.flip-card{display:none;margin:0}.flip-card.is-active{display:block}.flip-card,.card-inner{min-height:calc(100svh - 132px)}.face{padding:22px 20px;border-radius:24px;gap:12px}h1{font-size:31px}h2{font-size:26px}.lead{font-size:16px}.val{font-size:21px}.rows{font-size:14px}.mobile-pager{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:center;gap:8px;padding:10px 12px 14px;background:linear-gradient(180deg,rgba(244,248,255,.08),rgba(244,248,255,.96) 34%,#f4f8ff)}.mobile-pager button{border:0;border-radius:999px;padding:12px 16px;font-weight:900;background:var(--navy);color:#fff}.mobile-pager button:disabled{opacity:.38}.page-count{min-width:62px;text-align:center;font-size:13px;font-weight:900;color:var(--navy);padding-top:12px}}@media(min-width:431px){.mobile-pager{display:none}}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;main class=&quot;page&quot;&gt;&lt;a class=&quot;school-list-tab&quot; href=&quot;https://ymedu.tistory.com/category/%EA%B3%A0%EA%B5%90%20%EB%82%B4%EC%8B%A0%EB%B6%84%EC%84%9D/%EA%B0%95%EB%82%A8%EA%B5%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;강남구 내신분석 보기&lt;/a&gt;&lt;div id=&quot;deck&quot;&gt;&lt;/div&gt;&lt;/main&gt;&lt;div class=&quot;mobile-pager&quot;&gt;&lt;button class=&quot;prev-card&quot;&gt;이전 카드&lt;/button&gt;&lt;span class=&quot;page-count&quot;&gt;1 / 11&lt;/span&gt;&lt;button class=&quot;next-card&quot;&gt;다음 카드&lt;/button&gt;&lt;/div&gt;&lt;script&gt;
const school={name:&quot;중대부고&quot;,district:&quot;강남구 일반고&quot;};
const cards=[
[&quot;cover&quot;,&quot;CARD 01&quot;,&quot;중대부고&lt;br&gt;학업성취 분석 카드&quot;,&quot;강남구 대형 남고로 기타 54.0%가 보여주는 정시 분위기가 매우 강합니다. 다만 고2 이후 과목별 양극화가 큽니다.&quot;,[[&quot;졸업생&quot;,&quot;328명&quot;],[&quot;기타&quot;,&quot;177명 · 54.0%&quot;],[&quot;1학년&quot;,&quot;346명&quot;],[&quot;1등급 추정&quot;,&quot;약 35명&quot;]],&quot;2026년 4월 공시, 2025학년도 성취도 기준&quot;,&quot;종합 결론&quot;,&quot;정시 분위기는 최상급, 내신은 양극화 관리&quot;,&quot;중대부고는 규모와 정시 준비층이 강합니다. 하지만 영어Ⅰ, 과탐Ⅰ, 고3 영어Ⅱ에서 E비율이 높아 상위권과 이탈층의 차이가 큽니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 02&quot;,&quot;규모와 진로 현황&quot;,&quot;졸업생 328명 중 기타 54.0%입니다. 강남구 일반고 중에서도 정시·재수 준비 분위기가 매우 강한 편입니다.&quot;,[[&quot;대학교&quot;,&quot;136명 · 41.5%&quot;],[&quot;전문대&quot;,&quot;15명 · 4.6%&quot;],[&quot;취업&quot;,&quot;0명&quot;],[&quot;기타&quot;,&quot;177명 · 54.0%&quot;]],&quot;&quot;,&quot;진로 해석&quot;,&quot;목표 대학 재도전층이 두텁다&quot;,&quot;기타 비율이 절반을 넘는다는 것은 수능 경쟁력을 의식하는 학생층이 많다는 신호입니다. 내신은 쉬움보다 경쟁 강도로 해석해야 합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 03&quot;,&quot;고1 공통수학&quot;,&quot;공통수학1은 E비율이 매우 낮지만, 2학기에는 평균과 E비율이 흔들립니다.&quot;,[[&quot;공통수학1&quot;,&quot;평균 69.0 · A 11.9%&quot;,&quot;E 0.6%&quot;],[&quot;공통수학2&quot;,&quot;평균 64.3 · A 10.1%&quot;,&quot;E 13.6%&quot;],[&quot;1학년 규모&quot;,&quot;346명&quot;,&quot;1등급 약 35명&quot;]],&quot;&quot;,&quot;고1 해석&quot;,&quot;2학기부터 수학 체력 차이가 난다&quot;,&quot;공통수학1은 하위권 이탈이 적지만 공통수학2에서 평균이 내려갑니다. 고1 때 기초를 다지지 않으면 고2 대수 구간에서 부담이 커집니다.&quot;],
[&quot;midface&quot;,&quot;CARD 04&quot;,&quot;고2 수학Ⅱ&quot;,&quot;2025년부터 수학Ⅰ·수학Ⅱ는 대수 성격으로 재구성됩니다. 중대부고는 수학Ⅱ A권은 넓지만 평균은 낮습니다.&quot;,[[&quot;수학Ⅱ&quot;,&quot;평균 61.1 · A 20.4%&quot;,&quot;E 14.7%&quot;],[&quot;2학년 규모&quot;,&quot;329명&quot;,&quot;1등급 약 33명&quot;],[&quot;해석&quot;,&quot;A권 넓음&quot;,&quot;평균 낮음&quot;]],&quot;&quot;,&quot;고2 해석&quot;,&quot;A권 안에서도 최상위 변별이 필요하다&quot;,&quot;A비율은 넓지만 평균이 낮아 문제 난도나 학생 간 격차를 함께 봐야 합니다. 1등급은 A 안에서 다시 경쟁해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 05&quot;,&quot;고3 수학 참고&quot;,&quot;3학년 2학기 자료 기준 미적분·확통 평균이 낮습니다. 수능형 학습으로 전환되는 구간입니다.&quot;,[[&quot;미적분&quot;,&quot;평균 43.5 · A 12.7%&quot;,&quot;E 19.1%&quot;],[&quot;확률과 통계&quot;,&quot;평균 35.6 · A 6.1%&quot;,&quot;E 29.2%&quot;],[&quot;판정&quot;,&quot;참고용&quot;,&quot;고3 2학기&quot;]],&quot;&quot;,&quot;수학 해석&quot;,&quot;수능 준비와 내신 관리가 동시에 필요하다&quot;,&quot;고3 2학기는 참고용 성격이 강하지만 평균이 낮다는 점은 수학 체력 차이를 보여줍니다. 고2 겨울 이전에 미적분·확통 기본기를 완성해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 06&quot;,&quot;영어 양극화&quot;,&quot;공통영어는 괜찮지만 고2 영어Ⅰ과 고3 영어Ⅱ에서 E비율이 크게 올라갑니다.&quot;,[[&quot;공통영어1&quot;,&quot;평균 75.9 · A 22.7%&quot;,&quot;E 19.9%&quot;],[&quot;공통영어2&quot;,&quot;평균 77.5 · A 25.2%&quot;,&quot;E 3.6%&quot;],[&quot;영어Ⅰ&quot;,&quot;평균 67.2 · A 19.8%&quot;,&quot;E 40.5%&quot;]],&quot;&quot;,&quot;영어 해석&quot;,&quot;상위권과 포기층이 갈린다&quot;,&quot;영어는 A권도 있지만 E비율도 큰 과목입니다. 어휘·구문·서술형을 놓치면 고2 이후 급격히 이탈합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 07&quot;,&quot;과탐Ⅰ 위험&quot;,&quot;물리Ⅰ·화학Ⅰ·생명Ⅰ·지구Ⅰ에서 E비율이 높습니다. 특히 물리Ⅰ과 지구Ⅰ은 강한 경고입니다.&quot;,[[&quot;물리학Ⅰ&quot;,&quot;평균 62.7 · A 5.3%&quot;,&quot;E 54.4%&quot;],[&quot;화학Ⅰ&quot;,&quot;평균 70.3 · A 16.1%&quot;,&quot;E 31.4%&quot;],[&quot;지구과학Ⅰ&quot;,&quot;평균 63.5 · A 16.7%&quot;,&quot;E 46.7%&quot;]],&quot;&quot;,&quot;과탐 해석&quot;,&quot;선택과목에서 포기층이 크게 보인다&quot;,&quot;과탐은 선택자 집단 안에서도 격차가 큽니다. 이공계 지망은 과탐Ⅰ을 고2 때부터 수능형으로 연결해야 합니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 08&quot;,&quot;고3 영어Ⅱ 초위험&quot;,&quot;고3 2학기 영어Ⅱ는 E비율 72.7%입니다. 참고용이지만 하위권 이탈이 매우 큽니다.&quot;,[[&quot;영어Ⅱ&quot;,&quot;평균 44.5 · A 3.6%&quot;,&quot;E 72.7%&quot;],[&quot;지구과학Ⅱ&quot;,&quot;평균 38.0 · A 0.0%&quot;,&quot;참고용&quot;],[&quot;해석&quot;,&quot;정시 집중&quot;,&quot;내신 이탈 가능&quot;]],&quot;&quot;,&quot;고3 해석&quot;,&quot;정시형 학교의 전형적 모습&quot;,&quot;고3 후반에는 수능 중심으로 이동하면서 내신 성취도 분포가 흔들릴 수 있습니다. 학종을 생각한다면 고2까지 내신과 세특을 미리 확보해야 합니다.&quot;],
[&quot;midface&quot;,&quot;CARD 09&quot;,&quot;D·E 관리 포인트&quot;,&quot;중대부고는 규모와 상위권은 강하지만 과목별 D·E가 평균을 낮춥니다.&quot;,[[&quot;영어Ⅰ&quot;,&quot;E 40.5%&quot;],[&quot;물리학Ⅰ&quot;,&quot;E 54.4%&quot;],[&quot;지구과학Ⅰ&quot;,&quot;E 46.7%&quot;],[&quot;영어Ⅱ&quot;,&quot;E 72.7%&quot;]],&quot;&quot;,&quot;전략 해석&quot;,&quot;고2가 승부처다&quot;,&quot;수학·영어·과탐이 동시에 어려워지는 고2 구간에서 포기하지 않는 것이 중요합니다. 고3이 아니라 고2 때 이미 대입 준비의 격차가 벌어집니다.&quot;],
[&quot;goodface&quot;,&quot;CARD 10&quot;,&quot;수행평가·평가계획 확인&quot;,&quot;중대부고는 수학과·외국어과·과학정보과 등 교과군별 교수학습 및 평가 운영계획을 PDF로 공개했습니다.&quot;,[[&quot;확인 자료&quot;,&quot;교과군별 평가계획&quot;],[&quot;수학과&quot;,&quot;별도 PDF 공개&quot;],[&quot;과학정보과&quot;,&quot;별도 PDF 공개&quot;],[&quot;학종 포인트&quot;,&quot;교과별 탐구 확장 가능&quot;]],&quot;&quot;,&quot;수행평가 해석&quot;,&quot;교과군별 공개는 학종 점검에 좋다&quot;,&quot;수행평가 제목이 단순 활동보다 데이터 분석, 실험 탐구, 탐구 보고서, 논문 읽기형 활동인지 확인해야 합니다. 교과군별 자료가 있어 전공 연결 세특을 점검하기 좋습니다.&quot;],
[&quot;riskface&quot;,&quot;CARD 11&quot;,&quot;최종 전략&quot;,&quot;중대부고는 정시 분위기와 규모가 강점이지만, 고2 이후 영어·과탐 이탈을 막아야 합니다.&quot;,[[&quot;강점&quot;,&quot;기타 54.0%&quot;],[&quot;강점&quot;,&quot;대형 학교&quot;],[&quot;주의&quot;,&quot;영어·과탐 E비율&quot;],[&quot;전략&quot;,&quot;고2 전 과목 밸런스&quot;]],&quot;&quot;,&quot;마무리&quot;,&quot;정시형 분위기 속 내신 방어가 핵심&quot;,&quot;중대부고는 공부 분위기가 강한 만큼 경쟁도 강합니다. 학종까지 고려한다면 고2까지 내신과 수행평가를 확보하고, 고3은 수능 중심으로 연결하는 전략이 좋습니다.&quot;]
];
function rows(items){return `&lt;div class=&quot;rows&quot;&gt;${items.map(r=&gt;`&lt;div class=&quot;row&quot;&gt;&lt;b&gt;${r[0]}&lt;/b&gt;&lt;span&gt;${r[1]}&lt;br&gt;${r[2]||&quot;&quot;}&lt;/span&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}function stats(items){return `&lt;div class=&quot;stat-grid&quot;&gt;${items.map(s=&gt;`&lt;div class=&quot;stat&quot;&gt;&lt;div class=&quot;label&quot;&gt;${s[0]}&lt;/div&gt;&lt;div class=&quot;val&quot;&gt;${s[1]}&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;)}&lt;/div&gt;`}
document.querySelector(&quot;#deck&quot;).innerHTML=cards.map(c=&gt;`&lt;div class=&quot;flip-card&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;card-inner&quot;&gt;&lt;section class=&quot;face ${c[0]}&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[1]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;탭해 뒤집기&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tagrow&quot;&gt;&lt;span class=&quot;tag&quot;&gt;${school.name}&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;${school.district}&lt;/span&gt;&lt;/div&gt;&lt;h1&gt;${c[2]}&lt;/h1&gt;&lt;p class=&quot;lead&quot;&gt;${c[3]}&lt;/p&gt;&lt;/div&gt;${c[4][0].length===2?stats(c[4]):rows(c[4])}&lt;p class=&quot;caption&quot;&gt;${c[5]}&lt;/p&gt;&lt;/section&gt;&lt;section class=&quot;face back&quot;&gt;&lt;div&gt;&lt;div class=&quot;kicker&quot;&gt;&lt;span class=&quot;no&quot;&gt;${c[6]}&lt;/span&gt;&lt;span class=&quot;tap&quot;&gt;다시 탭&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;${c[7]}&lt;/h2&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;div class=&quot;quote ${c[0]===&quot;riskface&quot;?&quot;warning&quot;:c[0]===&quot;goodface&quot;?&quot;ok&quot;:&quot;&quot;}&quot;&gt;&lt;p&gt;${c[8]}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;&lt;/div&gt;`).join(&quot;&quot;);
const cardEls=[...document.querySelectorAll('.flip-card')];let activeIndex=0;const prevBtn=document.querySelector('.prev-card'),nextBtn=document.querySelector('.next-card'),pageCount=document.querySelector('.page-count');const isMobile=()=&gt;matchMedia('(max-width:430px)').matches;function showCard(i){activeIndex=Math.max(0,Math.min(cardEls.length-1,i));cardEls.forEach((c,n)=&gt;{c.classList.toggle('is-active',n===activeIndex);if(n!==activeIndex)c.classList.remove('flipped')});pageCount.textContent=`${activeIndex+1} / ${cardEls.length}`;prevBtn.disabled=activeIndex===0;nextBtn.disabled=activeIndex===cardEls.length-1;if(isMobile())requestAnimationFrame(()=&gt;scrollTo({top:0,left:0,behavior:'smooth'}))}cardEls.forEach((c,n)=&gt;{if(n===0)c.classList.add('is-active');const f=()=&gt;{const x=scrollX,y=scrollY;c.classList.toggle('flipped');requestAnimationFrame(()=&gt;scrollTo(x,y))};c.addEventListener('click',e=&gt;{e.preventDefault();f()});c.addEventListener('keydown',e=&gt;{if(e.key==='Enter'||e.key===' '){e.preventDefault();f()}})});prevBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex-1)};nextBtn.onclick=e=&gt;{e.preventDefault();e.stopPropagation();showCard(activeIndex+1)};addEventListener('resize',()=&gt;showCard(activeIndex));showCard(0);
&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;</description>
      <category>고교 내신분석/강남구</category>
      <author>team YM</author>
      <guid isPermaLink="true">https://ymedu.tistory.com/386</guid>
      <comments>https://ymedu.tistory.com/386#entry386comment</comments>
      <pubDate>Mon, 29 Jun 2026 20:06:46 +0900</pubDate>
    </item>
  </channel>
</rss>