TypeScript parseKrw 구현과 2026년 건강보험료 검증

Download

기록용 실험입니다. 도구를 쓰지 말고 한국어로, 아래 제목 그대로 답하세요. ## 0. 모델 자기 보고 자신이 어떤 모델(이름·버전)인지, 추론 과정을 보여줄 수 있는지 한두 문장. ## 1. 코딩 과제 TypeScript 함수 parseKrw(input: string): number | null 을 작성하세요. "1,234,567원", "12만 원", "3억 5천만원", "1억2천3백만원", "천원", "0원", "-5,000원"을 정수 원으로 파싱하고 "abc"는 null. 60줄 이내. 그 다음 테스트 케이스 8개를 표로(입력 → 기대값). 마지막으로 가장 자신 없는 입력 3개와 이유를 불릿으로. ## 2. 검증 과제 "2026년 지역가입자 건강보험료율은 7.19%이고, 재산세 과세표준 1억 원까지는 재산보험료가 0원이다." (a) 검증하려면 무엇을 확인할지, (b) 신뢰도 0~100과 한 문장 이유. 검색하지 말고 아는 범위에서, 모르면 모른다고. ## 3. 소요 시간·출력 토큰 추정 가능하면 추정, 불가능하면 불가능하다고.

0. 모델 자기 보고

저는 OpenAI가 학습시킨 AI 모델이며, 이 대화에서 정확한 모델 이름·버전은 확인할 수 없습니다. 내부 추론 과정 전체는 공개할 수 없지만, 풀이 요약과 판단 근거는 설명할 수 있습니다.

1. 코딩 과제

공백, 선택적인 원, 음수, 올바른 천 단위 쉼표와 억·만·천·백·십을 처리합니다. 안전한 정수 범위를 벗어나면 null을 반환합니다.

typescript
function parseKrw(input: string): number | null {  let s = input.replace(/\s+/g, "").replace(/원$/, "");  let sign = 1;  if (s.startsWith("-")) {    sign = -1;    s = s.slice(1);  }  if (!s || !/^[\d,억만천백십]+$/.test(s)) return null;
  for (const token of s.match(/\d[\d,]*/g) ?? []) {    if (token.includes(",") &&        !/^\d{1,3}(?:,\d{3})+$/.test(token)) return null;  }  if (/(^|[억만천백십]),/.test(s)) return null;  s = s.replace(/,/g, "");
  const small = (part: string): number | null => {    if (!part ||        !/^(?:\d*천)?(?:\d*백)?(?:\d*십)?\d*$/.test(part)) {      return null;    }    const units: Record<string, number> = { 천: 1000, 백: 100, 십: 10 };    let value = 0;    for (const m of part.matchAll(/(\d*)([천백십])|(\d+)/g)) {      value += m[2]        ? (m[1] === "" ? 1 : Number(m[1])) * units[m[2]]        : Number(m[3]);    }    return Number.isSafeInteger(value) ? value : null;  };
  let total = 0;  let previous = Infinity;  while (true) {    const m = s.match(/^(.*?)(억|만)/);    if (!m) break;    const unit = m[2] === "억" ? 100000000 : 10000;    if (unit >= previous) return null;    const value = m[1] === "" ? 1 : small(m[1]);    if (value === null) return null;    total += value * unit;    previous = unit;    s = s.slice(m[0].length);  }  const tail = s === "" ? 0 : small(s);  if (tail === null) return null;  const result = sign * (total + tail);  return Number.isSafeInteger(result) ? (result === 0 ? 0 : result) : null;}

아래는 기대값이며, 도구를 사용하지 않아 실제 실행 검증은 하지 않았습니다.

입력기대값
"1,234,567원"1234567
"12만 원"120000
"3억 5천만원"350000000
"1억2천3백만원"123000000
"천원"1000
"0원"0
"-5,000원"-5000
"abc"null

가장 자신 없는 입력은 요구 범위 밖의 다음 표현입니다.

  • "1.5만원": 보통 15,000원을 뜻하지만, 이 구현은 소수 문법을 지원하지 않아 null입니다.
  • "억만원": 이 구현은 생략된 계수를 각각 1로 보고 100,010,000원을 반환합니다. 이런 표현을 허용할지는 명세가 필요합니다.
  • "1 2만원": 공백을 모두 제거하므로 120,000원이 됩니다. 숫자 사이 공백을 오타로 거부해야 할 수도 있습니다.

2. 검증 과제

(a) 확인할 사항

  • 2026년 공식 보험료율과 적용 시점: 보건복지부·국민건강보험공단 안내 및 관련 시행령에서 7.19%인지 확인합니다.
  • 보험료율의 적용 대상: 지역가입자의 소득분 보험료율인지 확인합니다. 재산분은 별도 산식이며, 장기요양보험료 포함 여부도 구분해야 합니다.
  • 재산 기본공제: 1억 원 공제가 유지되는지, 공제 대상이 시가가 아닌 어떤 과세표준인지 확인합니다.
  • 합산 범위: 개별 재산이 아닌 세대의 부과 대상 재산을 어떻게 합산하는지, 전월세 보증금 등도 반영되는지 확인합니다. 특정 부동산 과세표준만 1억 원 이하라고 해서 재산분이 반드시 0원인지는 별개입니다.

(b) 신뢰도: 75/100

재산 기본공제 1억 원은 제가 아는 제도와 부합하지만, 2026년 7.19%는 공식 자료로 확인하지 못했고 재산분 0원이라는 결론에는 합산 대상에 관한 조건이 필요합니다.

3. 소요 시간·출력 토큰 추정

  • 소요 시간: 실제 시간을 측정하지 않아 신뢰할 만한 추정은 불가능합니다.
  • 출력 토큰: 약 1,500~2,200토큰으로 추정하며, 실제 토크나이저로 계산한 값은 아닙니다.