경로 · beginner

문제의 입출력 계약: solve(input)

채점이 무엇을 보는지, return과 console.log의 차이를 분명히 합니다.

배우기 · 시작 경로 · 14분 · 2/5 · 입출력 · 채점

이 트랙 목차 (5)
  1. 1. 배우기 지도: 문법 → 원리 → 문제
  2. 2. 문제의 입출력 계약: solve(input)
  3. 3. 하루 루프: 읽기 · 연습 · 한 문제
  4. 4. 채점 결과 읽기: 기대값·실제값·힌트
  5. 5. 진행 백업:보내기·가져오기

채점이 보는 것

대부분의 문제는 여러분이 정의한 solve 함수를 호출합니다.

function solve(input) {
  const [a, b] = input.trim().split(/\s+/).map(Number);
  return String(a + b);
}
def solve(input: str) -> str:
    a, b = map(int, input.split())
    return str(a + b)
local function solve(input)
  local a, b = input:match("(%S+)%s+(%S+)")
  return tostring(tonumber(a) + tonumber(b))
end

왜 함수인가

  1. 같은 solve여러 테스트 케이스에 반복 호출하기 쉽습니다.
  2. 브라우저에서 stdin을 흉내 내는 것보다 단순합니다.
  3. 출력 형식(공백·개행·타입)을 반환값 하나로 통제합니다.

자주 틀리는 점 (꼭 읽기)

1) console.log / print만 하고 return 없음

연습장에서는 콘솔에 보이지만, 채점은 return 값을 봅니다.
로그는 디버그용으로만 쓰세요.

2) 숫자와 문자열

"3" + "5""35" (문자열 연결).
숫자 덧셈이면 Number / int로 변환한 뒤 더하고, 필요할 때 다시 문자열로 반환합니다.

3) 앞뒤 공백·개행

입력 끝에 개행이 붙어 있는 경우가 많습니다.
trim() / .strip()을 먼저 하는 습관이 안전합니다.

4) 여러 줄 출력

기대값이 여러 줄이면 반환 문자열에 \n을 넣어야 합니다.
마지막 줄 뒤 개행이 있는지도 예제와 문자 단위로 맞추세요.

5) SQL은 다른 계약

SQL 문제는 solve 함수가 아니라 쿼리 문장 자체를 실행하고 결과 표를 비교합니다.
SQL 문법 트랙을 따로 보세요.

손으로 확인하는 습관

문제를 열면:

  1. 예제 입력 하나를 복사
  2. 연습장에서 solve만 실행
  3. 기대 출력과 문자 단위로 비교 (공백·개행 포함)

이 세 단계만 해도 “로컬에서는 되는데 채점만 틀려요”가 많이 줄어듭니다.

디버그 팁

실패 화면에 기대값·실제값이 나옵니다.
실제값이 비어 있으면 return 누락, 실제값이 "NaN"이면 파싱 실패를 의심하세요.

관련 짧은 원리

관련 문제