문자열의 길이를 기준으로 중앙 위치를 구한 뒤, 홀수와 짝수에서 선택할 구간이 어떻게 달라지는지 먼저 생각해 보세요.
문제
소문자로 이루어진 단어 하나가 주어지면 가운데 문자를 출력합니다. 단어 길이가 홀수라면 가운데 한 글자를, 짝수라면 가운데 두 글자를 출력해야 합니다. 입력 문자열의 길이는 100 이하입니다.
| 구분 | 내용 |
|---|---|
| 입력 | 첫 줄에 소문자 단어 하나 |
| 출력 | 가운데 한 글자 또는 두 글자 |
| 예제 1 | study → u |
| 예제 2 | good → oo |
문자열 인덱스는 0부터 시작합니다. 길이가 5인 study의 중앙 인덱스는 2이므로 세 번째 글자가 답입니다. 길이가 4인 good에서는 인덱스 1과 2가 가운데 두 칸입니다.
풀이와 정답
풀이와 정답 보기 (클릭)
가운데 기준점은 Math.floor(word.length / 2)로 계산합니다. 이후 길이의 홀짝에 따라 substring의 시작 위치만 다르게 정하면 됩니다.
알고리즘 설계

길이가 홀수라면 middle 위치 한 칸만 선택합니다. substring(start, end)는 끝 인덱스를 포함하지 않으므로 substring(middle, middle + 1)을 사용합니다. 길이가 짝수라면 중앙 오른쪽 칸이 middle이고 왼쪽 칸은 middle - 1입니다. 따라서 substring(middle - 1, middle + 1)로 두 글자를 가져옵니다.
전체 입력에 trim()을 적용하면 맨 앞과 맨 뒤의 공백 및 줄바꿈이 제거됩니다. 이 문제의 입력은 공백이 없는 소문자 단어 하나이므로, 마지막 줄바꿈을 없애기 위해 사용해도 단어 자체가 달라지지 않습니다.
JavaScript 풀이

const fs = require("fs");
const word = fs.readFileSync(0, "utf8").trim();
const middle = Math.floor(word.length / 2);
const answer =
word.length % 2 === 1
? word.substring(middle, middle + 1)
: word.substring(middle - 1, middle + 1);
console.log(answer);
조건식이 참이면 중앙 한 글자를, 거짓이면 중앙 두 글자를 answer에 저장합니다. 완성 코드는 함수 호출 예제가 아니라 표준 입력을 직접 읽으므로 문제의 실행 환경에서 그대로 사용할 수 있습니다.
복잡도와 검증
입력을 읽고 trim()으로 문자열을 정리하는 데 문자열 길이를 N이라 할 때 O(N) 시간이 듭니다. 중앙 인덱스 계산과 최대 두 글자를 자르는 선택 로직은 O(1)입니다. 입력 문자열 저장 공간은 O(N)이고, 풀이가 추가로 사용하는 변수와 결과 문자열은 O(1)입니다.
| 검증 | 입력 | 출력 |
|---|---|---|
| 홀수 길이 | study |
u |
| 짝수 길이 | good |
oo |
| 한 글자 | a |
a |
| 두 글자 | ab |
ab |
| 길이 100 | 중앙이 bc인 문자열 |
bc |
관련 문자열 순회 기초는 문자 찾기 JavaScript 풀이와 대문자로 통일 JavaScript 풀이에서도 이어서 확인할 수 있습니다.
풀이 전에 확인할 순서
- 입력값과 출력값을 한 문장으로 다시 적습니다.
- 반복할 대상과 비교·저장할 값을 정합니다.
- 필요한 자료구조와 시간복잡도를 예상합니다.
- 코드를 보기 전에 손으로 작은 예제를 계산합니다.
힌트: 가운데 문자 출력 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의 새 글을 확인할 수 있습니다.