읽기 전에 알아두면 좋아요
아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.
- 문자열 알고리즘 기초: 순회·문자 판별·대소문자 변환·숫자 추출문자열의 각 문자를 순서대로 읽고 위치를 확인하는 방법을 복습합니다. 홀짝 길이에 따라 가운데 인덱스와 자르는 범위를 정합니다.
- 기초 구현 패턴: 조건·정수 계산·순회·상태 갱신변수에 값을 담고 조건에 따라 합·개수·최솟값을 갱신하는 기초부터 확인합니다. 순회 중 필요한 상태를 정하고 갱신하는 기본 패턴입니다.
개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.
과정 위치와 선택 복습 안내
과정 위치: 문자열 기초 · 문제
과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.
JavaScript로 문법·실행 복습하기 (선택)
개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.
가운데 문자 출력 문제는 문자열의 어느 부분을 한 글자 또는 두 글자로 반환하나요?
문자열의 가운데에 있는 한 글자 또는 두 글자를 반환하는 문제입니다. 문자열의 길이·인덱스·홀짝의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.
적용 조건·범위: 이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.
공식 문서 참고: 관련 개념: MDN substring의 끝 인덱스 제외
문제
소문자로 이루어진 단어 하나가 주어지면 가운데 문자를 출력합니다. 단어 길이가 홀수라면 가운데 한 글자를, 짝수라면 가운데 두 글자를 출력해야 합니다. 입력 문자열의 길이는 100 이하입니다.
| 구분 | 내용 |
|---|---|
| 입력 | 첫 줄에 소문자 단어 하나 |
| 출력 | 가운데 한 글자 또는 두 글자 |
| 예제 1 | study → u |
| 예제 2 | good → oo |
문자열 인덱스는 0부터 시작합니다. 길이가 5인 study의 중앙 인덱스는 2이므로 세 번째 글자가 답입니다. 길이가 4인 good에서는 인덱스 1과 2가 가운데 두 칸입니다.
직접 풀어보기
먼저 선택한 언어의 입력·반환 계약에 맞춰 작성해 보세요. 힌트 받기와 정답과 비교하기는 코드를 실행하지 않는 AI 분석입니다. 해답·해설은 아래에서 필요할 때 펼칠 수 있습니다.
AI 힌트
코드를 실행한 채점 결과가 아닌 AI의 코드 분석입니다.
해답·해설 보기
function solution(text) {
const middle = Math.floor(text.length / 2);
return text.length % 2 ? text.slice(middle, middle + 1) : text.slice(middle - 1, middle + 1);
}
solution(text)에 문자열을 전달하며 결과 문자열을 반환합니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.
def solution(text):
middle = len(text) // 2
return text[middle:middle+1] if len(text) % 2 else text[middle-1:middle+1]
solution(text)에 문자열을 전달하며 결과 문자열을 반환합니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.
import java.util.*;
class Solution {
public String solution(String text) {
int middle = text.length() / 2;
return text.length() % 2 == 1 ? text.substring(middle, middle + 1) : text.substring(middle - 1, middle + 1);
}
}
Solution.solution(String text)에 문자열을 전달하며 결과 문자열을 반환합니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.
#include <algorithm>
#include <array>
#include <functional>
#include <list>
#include <limits>
#include <memory>
#include <numeric>
#include <queue>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
using namespace std;
string solution(const string & text) {
size_t middle = text.size() / 2;
return text.size() % 2 ? text.substr(middle, 1) : text.substr(middle - 1, 2);
}
solution(text)에 문자열을 전달하며 결과 문자열을 반환합니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.
using System;
using System.Collections.Generic;
using System.Text;
public class Solution {
public string Solve(string text) {
int middle = text.Length / 2;
return text.Length % 2 == 1 ? text.Substring(middle, 1) : text.Substring(middle - 1, 2);
}
}
Solution.Solve(string text)에 문자열을 전달하며 결과 문자열을 반환합니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.
원자료와 확인 범위
2026-10-12에 제공된 학습 자료 섹션 1. 기본문제풀이.pdf의 15쪽 ‘가운데 문자 출력’와 문제 조건·예제를 대조했습니다. 같은 ZIP의 해당 문제 TXT는 풀이 코드 자료입니다. 이 자료의 최초 출제 원문·저자·공개 배포 주소까지 확인한 것은 아닙니다.
이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.
가운데 기준점은 Math.floor(word.length / 2)로 계산합니다. 이후 길이의 홀짝에 따라 substring의 시작 위치만 다르게 정하면 됩니다.
알고리즘 설계

길이가 홀수라면 middle 위치 한 칸만 선택합니다. substring(start, end)는 끝 인덱스를 포함하지 않으므로 substring(middle, middle + 1)을 사용합니다. 길이가 짝수라면 중앙 오른쪽 칸이 middle이고 왼쪽 칸은 middle - 1입니다. 따라서 substring(middle - 1, middle + 1)로 두 글자를 가져옵니다.
전체 입력에 trim()을 적용하면 맨 앞과 맨 뒤의 공백 및 줄바꿈이 제거됩니다. 이 문제의 입력은 공백이 없는 소문자 단어 하나이므로, 마지막 줄바꿈을 없애기 위해 사용해도 단어 자체가 달라지지 않습니다.
문자열 길이·0부터 시작하는 인덱스·조건식을 알고 시작합니다. Node.js 전체 코드를 solution.cjs로 저장하고 UTF-8 input.txt에는 study 또는 good 중 한 단어만 넣으세요. PowerShell 7에서는 Get-Content -Raw -Encoding UTF8 ./input.txt | node ./solution.cjs, Bash·명령 프롬프트에서는 node solution.cjs < input.txt로 읽습니다. 두 예제는 한 파일에 함께 넣지 않고 각각 실행해 u와 oo를 비교합니다. 여기서 안내하는 값은 기존 예제의 기대 출력이며 현재 실행은 미확인입니다.

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 풀이에서도 이어서 확인할 수 있습니다.
이 문제를 푼 뒤 확인하기
짝수 길이와 홀수 길이 문자열의 가운데 인덱스를 각각 써 보세요.
본문의 예제와 이 반례를 직접 실행해 예상 출력과 비교하고, 결과가 다르면 입력 조건과 반복 범위를 다시 확인하세요.
글 소개·학습 준비·전체 목차
길이를 2로 나눈 몫을 중앙 기준점으로 잡습니다. 홀수 길이는 그 위치 한 글자, 짝수 길이는 바로 왼쪽과 그 위치의 두 글자를 선택하면 됩니다. 0부터 시작하는 인덱스로 두 구간을 먼저 적어 보세요.
이 글이 도움이 되었나요?
이어서 공부하기
체크포인트: 해설을 가리고 다시 풀고, 경계 입력을 하나 바꾸어 예상 결과와 실제 결과를 비교하세요. 같은 문자·찾는 문자 없음·홀짝 길이를 확인하고 결과의 등장 순서를 설명하세요.
다음 추천 · 문제: 중복문자제거 풀이
권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.
원래 과정 목록 순서 (선택)
읽음 기록
읽음 — / 전체 58개 · 필수 58개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.