문제 원문을 확인한 뒤 직접 풀이해 보세요. 해설과 정답은 아래 접힌 영역에서 확인할 수 있습니다.
문제
문제 설명
연필 1다스는 12자루입니다. 학생 1인당 연필을 1자루씩 나누어 준다고 할 때, 학생 수 N을 입력하면 필요한 연필의 다스 수를 계산하는 프로그램을 작성하세요.
입력 설명
첫 번째 줄에 1000 이하의 자연수 N이 입력됩니다.
출력 설명
첫 번째 줄에 필요한 다스 수를 출력합니다.
입력 예제 1
25
출력 예제 1
3
입력 예제 2
178
출력 예제 2
15
풀이와 정답
풀이와 정답 보기 (클릭)
이 문제의 핵심은 학생 수 N명을 12자루 단위로 나누어 올림하는 것입니다. 연필 1다스가 12자루이고 학생 1명에게 1자루씩 필요하므로, 필요한 다스 수는 N / 12의 올림값입니다.
JavaScript에서는 표준 입력으로 들어온 학생 수를 숫자로 바꾼 뒤 Math.ceil(n / 12)를 계산해 출력하면 됩니다. 입력은 자연수 하나이므로 배열 순회나 복잡한 조건 분기는 필요하지 않습니다.
알고리즘 설계

알고리즘은 간단합니다. 표준 입력에서 학생 수 N을 읽고 숫자로 변환한 다음, 한 다스의 연필 수인 12로 나눕니다. 정확히 나누어떨어지면 그 몫이 답이고, 나머지가 있으면 한 다스가 더 필요합니다.
이 나머지 처리를 직접 조건문으로 작성할 수도 있지만, Math.ceil을 사용하면 더 짧고 명확합니다. 예를 들어 25명을 12로 나누면 2.083…이므로 올림해 3다스가 필요하고, 178명을 12로 나누면 14.833…이므로 15다스가 필요합니다.
JavaScript 풀이

아래 코드는 입력값 하나를 읽어 필요한 연필 다스 수를 출력합니다. fs.readFileSync(0, 'utf8')로 표준 입력을 읽고, Number로 학생 수를 숫자로 변환합니다.
변수 n은 학생 수입니다. 학생마다 연필 1자루가 필요하므로 총 필요한 연필 수 역시 n자루이고, 이를 12자루씩 묶은 다스 수로 바꾸기 위해 Math.ceil(n / 12)를 사용합니다.
const fs = require('fs');
const n = Number(fs.readFileSync(0, 'utf8').trim());
const answer = Math.ceil(n / 12);
console.log(answer);
위 코드에서 Math.ceil은 나눗셈 결과를 올림합니다. 12명까지는 1다스, 13명부터 24명까지는 2다스처럼 나머지가 있는 순간 다스 수가 하나 더 필요하기 때문입니다.
console.log에는 최종 정답만 출력합니다. 예제 입력 25는 Math.ceil(25 / 12)가 3이므로 3을 출력하고, 예제 입력 178은 Math.ceil(178 / 12)가 15이므로 15를 출력합니다.
복잡도와 검증
입력은 학생 수 N 하나이고 계산도 나눗셈과 올림 한 번으로 끝납니다. 따라서 시간 복잡도는 O(1)입니다.
추가로 저장하는 값도 n과 answer 정도뿐이므로 공간 복잡도 역시 O(1)입니다. 입력 범위가 1000 이하이기 때문에 성능보다 계산식을 정확히 세우는 것이 중요합니다.
검증은 예제로 확인할 수 있습니다. 25명에게는 24자루인 2다스로 부족하므로 3다스가 필요하고, 178명에게는 168자루인 14다스로 부족하므로 15다스가 필요합니다. 12, 24처럼 12로 나누어떨어지는 값은 몫 그대로 출력됩니다.
정리하면, 연필 개수 문제는 학생 수를 12자루 단위로 묶어 올림하는 기본 산술 문제입니다. 입력을 숫자로 바꾸고 Math.ceil(n / 12)만 정확히 출력하면 됩니다.
같이 읽으면 좋은 글
풀이 전에 확인할 순서
- 입력값과 출력값을 한 문장으로 다시 적습니다.
- 반복할 대상과 비교·저장할 값을 정합니다.
- 필요한 자료구조와 시간복잡도를 예상합니다.
- 코드를 보기 전에 손으로 작은 예제를 계산합니다.
힌트: 연필 개수 JavaScript 풀이
정답 코드를 바로 따라 쓰기보다, 본문에서 값이 갱신되는 조건과 반복 범위를 먼저 찾으세요. 반복 한 번마다 반드시 유지되어야 하는 값이 무엇인지 적으면 풀이의 중심 변수를 고르기 쉽습니다.
테스트 확인
- 가능한 가장 작은 입력
- 같은 값이나 문자가 반복되는 입력
- 정답이 처음 또는 마지막 위치에서 결정되는 입력
- 입력 제한에 가까운 경우의 실행 시간
확인 결과: 본문의 예제뿐 아니라 위 경계 사례에서도 예상값과 실제 출력이 같아야 풀이가 완료됩니다.
이 글이 도움이 되었나요?
코딩테스트 JavaScript 학습 순서
필수 49개 · 전체 49개
읽음 기록 관리
전체 과정 목차 (49개)
- 필수 길잡이 · 코딩테스트 JS 자료구조 로드맵: 배열, 해시, 스택, 투 포인터 순서
- 필수 학습 · 세 수 중 최솟값 JavaScript 조건문 풀이 정리
- 필수 학습 · 삼각형 판별하기 JavaScript 풀이
- 필수 학습 · 연필 개수 JavaScript 풀이 현재 글
- 필수 학습 · 1부터 N까지 합 출력하기 JavaScript 풀이
- 필수 학습 · 최솟값 구하기 JavaScript 풀이|배열 순회와 비교 갱신 원리
- 필수 학습 · 홀수 JavaScript 풀이: 조건 판별과 결과 처리 정리
- 필수 학습 · 10부제 JavaScript 풀이: 끝자리 비교로 위반 차량 수 세기
- 필수 학습 · A를 #으로 JavaScript 풀이: 문자열 순회와 치환
- 필수 학습 · 문자 찾기 JavaScript 풀이: 문자열 순회로 개수 세기
- 필수 학습 · 대문자 찾기 JavaScript 풀이
- 필수 학습 · 대문자로 통일 JavaScript 풀이
- 필수 학습 · 대소문자 변환 JavaScript 풀이
- 필수 학습 · 일곱 난쟁이 JavaScript 풀이: 두 명을 제외하는 완전탐색
- 필수 학습 · 코딩테스트 JS Map 풀이: 학급 회장 득표수 세기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 올바른 괄호 검증하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 괄호문자 제거하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 크레인 인형뽑기 처리법
- 필수 학습 · 코딩테스트 JS 스택 풀이: 후위식 연산 계산하기
- 필수 학습 · 코딩테스트 JS 스택 풀이: 쇠막대기 레이저 절단 개수 세기
- 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 두 정렬 배열 합치기
- 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 공통 원소 추출하기
- 필수 학습 · 코딩테스트 JS 슬라이딩 윈도우 풀이: 최대 매출 구간 합 계산하기
- 필수 학습 · JavaScript 투 포인터: 합이 M인 연속 부분수열 개수
- 필수 학습 · 코딩테스트 JS 해시 풀이: 모든 아나그램 찾기
- 필수 학습 · 가장 긴 문자열 JavaScript 풀이
- 필수 학습 · 가운데 문자 출력 JavaScript 풀이
- 필수 학습 · 중복문자제거 JavaScript 풀이
- 필수 학습 · 코딩테스트 JS 고급: 최소 힙으로 다익스트라 최단 경로 구하기
- 필수 학습 · 코딩테스트 JS Union-Find: 연결 성분 수와 크기 구하기
- 필수 학습 · 코딩테스트 JS Trie: 접두사에 맞는 단어 수 세기
- 필수 학습 · 코딩테스트 JS Fenwick Tree: 값 갱신과 구간 합 처리
- 필수 학습 · 코딩테스트 JS 세그먼트 트리: 단일 대입과 구간 합
- 필수 학습 · 코딩테스트 JS LRU 캐시: 지도 타일 재사용 기록
- 필수 학습 · 코딩테스트 JS AVL 트리: 기준 이상 최솟값 찾기
- 필수 학습 · 코딩테스트 JS 큐: 상담 창구 대기열 명령 처리
- 필수 학습 · 코딩테스트 JS 연결 리스트: 재생 대기 목록 관리
- 필수 학습 · JavaScript 원형 덱 연습: 최근 기록 창과 되돌리기
- 필수 학습 · JavaScript 해시 테이블 연습: 정규화 문자열 빈도와 등장 순서
- 필수 학습 · JavaScript 트리 순회 연습: 깊이별 노드 묶기
- 필수 학습 · JavaScript BST 연습: 닫힌 구간의 중복 키 보고서
- 필수 학습 · JavaScript 최소 힙 연습: 동률 순서를 지키는 작업 스케줄러
- 필수 학습 · JavaScript 그래프 연습: 연결 구역 크기를 작은 순서로 출력하기
- 필수 학습 · 중복단어제거 JavaScript 풀이
- 필수 학습 · TypeScript 이진 탐색 연습: 숫자 카드 존재 여부 확인
- 필수 학습 · 큰 수 출력하기 JavaScript 풀이
- 필수 학습 · 보이는 학생 JavaScript 풀이
- 필수 학습 · 가위바위보 JavaScript 풀이
- 필수 학습 · 점수계산 JavaScript 풀이
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.