- {[
- ["visual", "시각화"],
- ["tests", "테스트 결과"],
- ["review", "코드 리뷰"],
- ].map(([k, v]) => (
-
- ))}
-
- {tab !== "review" && (
+ {
<>
+
+ {[
+ ["tests", "테스트 결과"],
+ ["review", "코드 리뷰"],
+ ].map(([k, v]) => (
+
+ ))}
+
+ {tab !== "review" &&
+ (selectedTest ? (
+ <>
+
+
+ 실행 시간
+ {selectedTest.elapsedMs} ms
+
+
+ 최대 메모리
+
+ {(selectedTest.peakMemoryBytes / 1024 / 1024).toFixed(
+ 2,
)}{" "}
- / 3건 남음
-
+ MiB
+
-
- 논리 오류 · 효율 개선 · 대안 코드를 확인해요.
-
- 작성 코드, 권장 코드, 문제를 LLM에 전달합니다.
-
-
- {!config?.reviewEnabled && (
-
- 리뷰 서비스 연결이 준비 중이에요. 이용량은 차감되지
- 않아요.
+
+
+ 엄격 비교 · 아래 표기는 공백과 줄바꿈을 포함해요.
+
+ {[
+ ["입력", selectedTest.input],
+ [
+ "예상 출력",
+ selectedTest.expected === null
+ ? "사용자 입력 실행 — 채점 없음"
+ : JSON.stringify(selectedTest.expected),
+ ],
+ ["실제 출력", JSON.stringify(selectedTest.actual)],
+ ["실행 오류", selectedTest.stderr || "없음"],
+ ].map(([k, v]) => (
+
+ ))}
+ >
+ ) : (
+
+ 코드를 실행하면 테스트 결과가 여기에 표시돼요.
+
+ ))}
+ {tab === "review" && (
+ <>
+
+
코드 리뷰
+
+ 무료{" "}
+ {Math.max(
+ 0,
+ 3 - (usage?.consumed ?? 0) - (usage?.reserved ?? 0),
+ )}{" "}
+ / 3건 남음
+
+
+
+ 논리 오류 · 효율 개선 · 대안 코드를 확인해요.
+
+ 작성 코드, 권장 코드, 문제를 LLM에 전달합니다.
+
+
+ {!config?.reviewEnabled && (
+
+ 리뷰 서비스 연결이 준비 중이에요. 이용량은 차감되지
+ 않아요.
+
+ )}
+
+ KST 매월 1일 초기화 · 이월 없음 · 추가 구매는 가격 확정 후
+ 제공
+
+ {record.reviews?.map((r: any) => (
+
+ {r.status}
+
+ {new Date(r.created_at).toLocaleString("ko-KR")}
+
+ {r.status === "FAILED" && (
+
+ 리뷰를 완료하지 못했어요. 이용량은 차감되지 않았어요.
)}
-
- KST 매월 1일 초기화 · 이월 없음 · 추가 구매는 가격 확정
- 후 제공
-
- {record.reviews?.map((r: any) => (
-
- {r.status}
-
- {new Date(r.created_at).toLocaleString("ko-KR")}
-
- {r.status === "FAILED" && (
-
- 리뷰를 완료하지 못했어요. 이용량은 차감되지
- 않았어요.
-
- )}
- {r.result && (
- <>
- 논리 오류
-
- {r.result.logicalErrors}
-
- 효율 개선
-
- {r.result.efficiencyImprovements}
-
- 대안 코드
- {r.result.alternativeCode}
- >
- )}
-
-
- 리뷰 당시 코드 · {labels[r.language]}
-
- {r.source}
-
-
- ))}
- >
- )}
-
-