가장 긴 문자열 JavaScript 풀이

2026.09.08·수정 2026.09.13·약 5분·작성: 해비·블로그 소개
먼저 직접 풀어보세요

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

문제

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

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

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

풀이와 정답

풀이와 정답 보기 (클릭)

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

알고리즘 설계

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

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

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

현재 문자열 길이 처리 뒤 longest
teacher 7 teacher
time 4 teacher
student 7 teacher
beautiful 9 beautiful
good 4 beautiful

JavaScript 풀이

문자열을 순회하며 현재 최장 문자열을 더 긴 값으로 갱신하는 흐름
비교 결과가 더 긴 경우에만 정답 후보를 교체합니다.

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

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 경계값을 실행해 기대 출력과 일치하는지 확인합니다.

풀이 전에 확인할 순서

  1. 입력값과 출력값을 한 문장으로 다시 적습니다.
  2. 반복할 대상과 비교·저장할 값을 정합니다.
  3. 필요한 자료구조와 시간복잡도를 예상합니다.
  4. 코드를 보기 전에 손으로 작은 예제를 계산합니다.
힌트: 가장 긴 문자열 JavaScript 풀이

정답 코드를 바로 따라 쓰기보다, 본문에서 값이 갱신되는 조건과 반복 범위를 먼저 찾으세요. 반복 한 번마다 반드시 유지되어야 하는 값이 무엇인지 적으면 풀이의 중심 변수를 고르기 쉽습니다.

테스트 확인

  • 가능한 가장 작은 입력
  • 같은 값이나 문자가 반복되는 입력
  • 정답이 처음 또는 마지막 위치에서 결정되는 입력
  • 입력 제한에 가까운 경우의 실행 시간

확인 결과: 본문의 예제뿐 아니라 위 경계 사례에서도 예상값과 실제 출력이 같아야 풀이가 완료됩니다.

이 글이 도움이 되었나요?

조회 중

코딩테스트 JavaScript 학습 순서

필수 49개 · 전체 49개

읽음 기록 관리

전체 과정 목차 (49개)
  1. 필수 길잡이 · 코딩테스트 JS 자료구조 로드맵: 배열, 해시, 스택, 투 포인터 순서
  2. 필수 학습 · 세 수 중 최솟값 JavaScript 조건문 풀이 정리
  3. 필수 학습 · 삼각형 판별하기 JavaScript 풀이
  4. 필수 학습 · 연필 개수 JavaScript 풀이
  5. 필수 학습 · 1부터 N까지 합 출력하기 JavaScript 풀이
  6. 필수 학습 · 최솟값 구하기 JavaScript 풀이|배열 순회와 비교 갱신 원리
  7. 필수 학습 · 홀수 JavaScript 풀이: 조건 판별과 결과 처리 정리
  8. 필수 학습 · 10부제 JavaScript 풀이: 끝자리 비교로 위반 차량 수 세기
  9. 필수 학습 · A를 #으로 JavaScript 풀이: 문자열 순회와 치환
  10. 필수 학습 · 문자 찾기 JavaScript 풀이: 문자열 순회로 개수 세기
  11. 필수 학습 · 대문자 찾기 JavaScript 풀이
  12. 필수 학습 · 대문자로 통일 JavaScript 풀이
  13. 필수 학습 · 대소문자 변환 JavaScript 풀이
  14. 필수 학습 · 일곱 난쟁이 JavaScript 풀이: 두 명을 제외하는 완전탐색
  15. 필수 학습 · 코딩테스트 JS Map 풀이: 학급 회장 득표수 세기
  16. 필수 학습 · 코딩테스트 JS 스택 풀이: 올바른 괄호 검증하기
  17. 필수 학습 · 코딩테스트 JS 스택 풀이: 괄호문자 제거하기
  18. 필수 학습 · 코딩테스트 JS 스택 풀이: 크레인 인형뽑기 처리법
  19. 필수 학습 · 코딩테스트 JS 스택 풀이: 후위식 연산 계산하기
  20. 필수 학습 · 코딩테스트 JS 스택 풀이: 쇠막대기 레이저 절단 개수 세기
  21. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 두 정렬 배열 합치기
  22. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 공통 원소 추출하기
  23. 필수 학습 · 코딩테스트 JS 슬라이딩 윈도우 풀이: 최대 매출 구간 합 계산하기
  24. 필수 학습 · JavaScript 투 포인터: 합이 M인 연속 부분수열 개수
  25. 필수 학습 · 코딩테스트 JS 해시 풀이: 모든 아나그램 찾기
  26. 필수 학습 · 가장 긴 문자열 JavaScript 풀이 현재 글
  27. 필수 학습 · 가운데 문자 출력 JavaScript 풀이
  28. 필수 학습 · 중복문자제거 JavaScript 풀이
  29. 필수 학습 · 코딩테스트 JS 고급: 최소 힙으로 다익스트라 최단 경로 구하기
  30. 필수 학습 · 코딩테스트 JS Union-Find: 연결 성분 수와 크기 구하기
  31. 필수 학습 · 코딩테스트 JS Trie: 접두사에 맞는 단어 수 세기
  32. 필수 학습 · 코딩테스트 JS Fenwick Tree: 값 갱신과 구간 합 처리
  33. 필수 학습 · 코딩테스트 JS 세그먼트 트리: 단일 대입과 구간 합
  34. 필수 학습 · 코딩테스트 JS LRU 캐시: 지도 타일 재사용 기록
  35. 필수 학습 · 코딩테스트 JS AVL 트리: 기준 이상 최솟값 찾기
  36. 필수 학습 · 코딩테스트 JS 큐: 상담 창구 대기열 명령 처리
  37. 필수 학습 · 코딩테스트 JS 연결 리스트: 재생 대기 목록 관리
  38. 필수 학습 · JavaScript 원형 덱 연습: 최근 기록 창과 되돌리기
  39. 필수 학습 · JavaScript 해시 테이블 연습: 정규화 문자열 빈도와 등장 순서
  40. 필수 학습 · JavaScript 트리 순회 연습: 깊이별 노드 묶기
  41. 필수 학습 · JavaScript BST 연습: 닫힌 구간의 중복 키 보고서
  42. 필수 학습 · JavaScript 최소 힙 연습: 동률 순서를 지키는 작업 스케줄러
  43. 필수 학습 · JavaScript 그래프 연습: 연결 구역 크기를 작은 순서로 출력하기
  44. 필수 학습 · 중복단어제거 JavaScript 풀이
  45. 필수 학습 · TypeScript 이진 탐색 연습: 숫자 카드 존재 여부 확인
  46. 필수 학습 · 큰 수 출력하기 JavaScript 풀이
  47. 필수 학습 · 보이는 학생 JavaScript 풀이
  48. 필수 학습 · 가위바위보 JavaScript 풀이
  49. 필수 학습 · 점수계산 JavaScript 풀이

새 글 받아보기

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

RSS 피드 구독하기

댓글 남기기