가장 긴 문자열 풀이

··설명 약 5분·작성: 해비·블로그 소개

읽기 전에 알아두면 좋아요

아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.

개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.

과정 위치와 선택 복습 안내

과정 위치: 문자열 기초 · 문제

과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.

JavaScript로 문법·실행 복습하기 (선택)

개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.

가장 긴 문자열 문제는 문자열 배열에서 어떤 문자열 하나를 반환하나요?

문자열 배열에서 가장 긴 문자열 하나를 찾아 반환하는 문제입니다. 배열·문자열의 길이·비교의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.

적용 조건·범위: 제공 예제에서는 teacher와 student가 모두 7자로, “길이는 서로 다르다”는 제한 문구와 맞지 않습니다. 다만 두 문자열 모두 최장 문자열이 아니므로 예제의 정답 beautiful에는 영향이 없습니다. 자료에 없는 동률 선택 규칙은 따로 가정하지 않습니다.

공식 문서 참고: 관련 개념: MDN 문자열 length의 측정 단위

문제

자연수 N과 문자열 N개가 주어질 때 길이가 가장 긴 문자열 하나를 출력하는 문제입니다. N은 3 이상 30 이하이고, 각 문자열의 길이는 100 이하입니다. 원문 자료에는 각 문자열의 길이가 서로 다르다고 적혀 있습니다.

구분 내용
입력 첫 줄에 N, 다음 N개 줄에 문자열 하나씩
출력 가장 긴 문자열
예제 입력 5
teacher
time
student
beautiful
good
예제 출력 beautiful

제공 예제에서는 teacher와 student가 모두 7자로, “길이는 서로 다르다”는 제한 문구와 맞지 않습니다. 다만 두 문자열 모두 최장 문자열이 아니므로 예제의 정답 beautiful에는 영향이 없습니다. 자료에 없는 동률 선택 규칙은 따로 가정하지 않습니다.

직접 풀어보기

먼저 선택한 언어의 입력·반환 계약에 맞춰 작성해 보세요. 힌트 받기와 정답과 비교하기는 코드를 실행하지 않는 AI 분석입니다. 해답·해설은 아래에서 필요할 때 펼칠 수 있습니다.

0 / 6,000바이트

solution(words)에 문자열 배열을 전달하고 가장 긴 문자열 하나를 반환합니다. 이 풀이의 길이는 원문 JavaScript처럼 UTF-16 코드 단위 수입니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요. Tab은 다음 항목으로 이동합니다. 입력 영역 오른쪽 아래를 끌어 높이를 조절할 수 있습니다.

비밀키·개인정보는 입력하지 마세요. 코드는 이 페이지에만 유지됩니다.

해답·해설 보기
JavaScript 해답
function solution(words) {
    let result = words[0];
    for (const word of words) if (word.length > result.length) result = word;
    return result;
}

solution(words)에 문자열 배열을 전달하고 가장 긴 문자열 하나를 반환합니다. 이 풀이의 길이는 원문 JavaScript처럼 UTF-16 코드 단위 수입니다. 입력은 문제의 유효한 범위를 만족합니다. 표준 입력·출력 없이 결과를 반환하세요.

원자료와 확인 범위

2026-10-12에 제공된 학습 자료 섹션 1. 기본문제풀이.pdf의 14쪽 ‘가장 긴 문자열’와 문제 조건·예제를 대조했습니다. 같은 ZIP의 해당 문제 TXT는 풀이 코드 자료입니다. 이 자료의 최초 출제 원문·저자·공개 배포 주소까지 확인한 것은 아닙니다.

자료의 “각 문자열 길이는 서로 다르다”는 조건과 teacher·student가 모두 7자인 예제의 충돌은 본문에 표시한 그대로입니다. 최장 문자열의 동률 선택 규칙을 원자료가 정한 것으로 추가하지 않습니다.

이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.

핵심은 현재까지 확인한 문자열 가운데 가장 긴 값을 한 변수에 저장하는 것입니다. 처음에는 첫 문자열을 정답 후보로 두고, 이후 문자열이 더 길 때만 후보를 교체합니다.

알고리즘 설계

서로 길이가 다른 문자열을 차례로 비교해 가장 긴 문자열을 선택하는 과정
각 문자열의 길이를 비교하면서 현재 최장 문자열을 유지합니다.

문자열을 왼쪽부터 한 번 순회합니다. 반복문의 각 단계가 끝나면 longest에는 지금까지 본 문자열 중 가장 긴 값이 남습니다. 새 문자열이 더 길면 교체하고, 그렇지 않으면 그대로 두므로 마지막 문자열까지 확인한 뒤에는 전체 최장 문자열이 정답이 됩니다.

제공된 풀이 시도도 별도의 최댓값과 정답 문자열을 함께 갱신하는 올바른 방향입니다. 완성 코드에서는 첫 문자열을 기준값으로 사용해 숫자 센티널을 없애고, Node.js 표준 입력 처리만 더했습니다.

현재 문자열 길이 처리 뒤 longest
teacher 7 teacher
time 4 teacher
student 7 teacher
beautiful 9 beautiful
good 4 beautiful
문자열을 순회하며 현재 최장 문자열을 더 긴 값으로 갱신하는 흐름
비교 결과가 더 긴 경우에만 정답 후보를 교체합니다.

fs.readFileSync(0, "utf8")로 입력 전체를 읽고 /\r?\n/으로 나누면 LF와 CRLF 줄바꿈을 모두 처리할 수 있습니다. 첫 줄은 개수로 변환하고, 이어지는 정확히 N개 줄만 문자열 목록으로 사용합니다. 전체 입력에 trim()을 적용하지 않으므로 앞뒤 공백을 함께 제거하는 부작용도 피합니다.

Node.js가 준비된 폴더에서 아래 정답 코드 한 블록을 solution.cjs로 저장합니다. 입력 파일 input.txt의 첫 줄은 5, 다음 다섯 줄은 teacher, time, student, beautiful, good입니다. N을 제외한 다섯 문자열의 길이를 비교하므로 기대 출력은 beautiful 한 줄입니다. Bash나 명령 프롬프트에서는 node solution.cjs < input.txt를, PowerShell에서는 cmd /c “node solution.cjs < input.txt”를 실행합니다. 코드의 입력 경로 0은 이 파일을 표준 입력으로 받습니다. 파일과 출력의 문자열 철자가 같고 가장 긴 값이 유지되는지 확인하세요.

const fs = require("fs");

const lines = fs.readFileSync(0, "utf8").split(/\r?\n/);
const count = Number(lines[0]);
const words = lines.slice(1, count + 1);

let longest = words[0];

for (let index = 1; index < count; index += 1) {
  if (words[index].length > longest.length) {
    longest = words[index];
  }
}

console.log(longest);

비교 연산은 >를 사용합니다. 유효한 입력에서는 길이가 서로 다르다는 제한 때문에 최장 길이 동률이 생기지 않습니다. 예제의 7자 동률에서도 두 값이 최장값이 아니어서 최종 출력은 그대로입니다.

복잡도와 검증

최장 문자열을 선택하는 반복은 문자열 수 N에 비례하므로 O(N)입니다. 입력을 줄로 나누는 비용까지 포함하면 전체 문자 수를 M이라고 할 때 O(M)입니다. 입력 문자열 배열은 O(M) 공간을 사용하지만, 선택 로직이 추가로 쓰는 공간은 longest와 반복 인덱스뿐이어서 입력을 제외하면 O(1)입니다.

검증 입력 특징 기대 출력
원문 예제 LF·CRLF 중간 위치가 최장 beautiful
첫 값 최장 abcdef, b, ccc abcdef
마지막 값 최장 a, bb, cccc cccc
최대 길이 100자 문자열 포함 100자 문자열

저장된 완성 코드는 원문 예제의 LF와 CRLF 입력, 최장값의 처음·중간·마지막 위치, 길이 100 경계값을 실행해 기대 출력과 일치하는지 확인합니다.

이 문제를 푼 뒤 확인하기

최장 문자열이 처음·중간·마지막에 있는 유효한 입력을 비교하세요. 예를 들어 N=3, a/bb/cccc는 cccc입니다. 최장 길이 동률은 명시된 제한 밖이며, 코드의 > 비교가 먼저 등장한 값을 유지하는 것은 추가 동작 관찰입니다.

본문의 예제와 이 반례를 직접 실행해 예상 출력과 비교하고, 결과가 다르면 입력 조건과 반복 범위를 다시 확인하세요.

글 소개·학습 준비·전체 목차
먼저 직접 풀어보세요

문자열을 한 번씩 살펴보면서 현재까지 가장 긴 값을 유지하는 방법을 생각해 보세요. 해설과 정답은 아래 접힌 영역에서 확인할 수 있습니다.

이 글이 도움이 되었나요?

조회 중

이어서 공부하기

체크포인트: 해설을 가리고 다시 풀고, 경계 입력을 하나 바꾸어 예상 결과와 실제 결과를 비교하세요. 같은 문자·찾는 문자 없음·홀짝 길이를 확인하고 결과의 등장 순서를 설명하세요.

다음 추천 · 문제: 가운데 문자 출력 풀이

같은 주제의 문제에 적용하며 방금 배운 개념을 확인합니다.

권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.

원래 과정 목록 순서 (선택)

읽음 기록

읽음 — / 전체 58개 · 필수 58개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기