AI 보이는 추론 실험실

AI가 숫자 배열에 sort()만 쓰면 크기순으로 정렬될까요?

100이 3 앞에 놓이는 이유를 찾아봅니다. 같은 숫자로 기본 정렬과 숫자 정렬을 실행하고, 원본 배열도 함께 확인합니다.

입문게시 2026-10-24읽기·실험 약 9분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

도서관에서 두 사람이 3, 21, 100, 4가 적힌 숫자 카드를 살피고, 작은 올리가 두 날개로 빈 카드를 든 채 한 발을 내딛는 장면
주제 이해를 돕는 AI 생성 연출 사진 · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

[3, 21, 100, 4]를 자바스크립트의 sort()로 정렬하면 맨 앞에는 어떤 수가 올까요?

3, 21, 100, 4의 기본 문자열 정렬 결과와 숫자 오름차순 결과를 비교한 그림
3, 21, 100, 4의 기본 문자열 정렬 결과와 숫자 오름차순 결과를 비교한 그림 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

숫자 100이 왜 맨 앞에 오나요?

자바스크립트(JavaScript, 웹페이지 등에 쓰이는 프로그래밍 언어)의 일반 배열에서 sort()를 호출하면 비교 기준을 정하는 함수를 함께 줄 수 있습니다. 이 함수를 생략하면 각 값을 문자열로 바꿔 그 문자 순서를 비교합니다. [3, 21, 100, 4]의 결과는 [100, 21, 3, 4]입니다.

문자열 "100"의 첫 글자는 "1"입니다. "21"의 첫 글자 "2", "3", "4"를 차례로 비교하므로 이 순서가 나옵니다. 정확히는 문자를 나타내는 UTF-16 코드 단위의 값을 비교합니다. 여기서는 숫자 0부터 9까지의 문자 순서에 주목하면 됩니다. 비교를 위해 문자열로 읽더라도 결과 배열의 값은 원래의 숫자형으로 남습니다.

참고 · MDN Web Docs — 배열의 기본 정렬과 비교 함수 ↗

02

숫자의 크기순으로 정렬하려면 어떻게 쓰나요?

숫자 배열에는 sort((a, b) => a - b)처럼 비교 함수를 줄 수 있습니다. 3과 21을 비교하면 3-21은 음수이므로 3이 앞에 옵니다. 21과 4를 비교하면 21-4는 양수이므로 4가 앞에 옵니다. 두 수가 같아 차이가 0이면 두 원소의 기존 순서를 유지합니다. 결과는 [3, 4, 21, 100]입니다.

큰 수부터 놓으려면 비교 함수를 (a, b) => b - a로 바꿉니다. 같은 배열의 결과는 [100, 21, 4, 3]입니다. 이 실습은 유한한 숫자형 값만 다룹니다. 문자열과 숫자를 섞거나 NaN처럼 정상적인 숫자 비교가 어려운 값을 넣으면 입력 확인과 별도의 처리 규칙이 필요합니다.

참고 · Ecma TC39 — 배열 정렬의 표준 절차 ↗

03

정렬하면 원래 배열도 바뀌나요?

원본 배열에 sort()를 실행하면 그 배열의 순서가 바뀝니다. 정렬 전 상태를 남기려면 [...numbers].sort((a, b) => a - b)처럼 복사한 배열을 정렬할 수 있습니다. 대괄호 안의 ...numbers는 numbers에 있는 원소를 새 배열에 넣는 표현입니다.

numbers.toSorted((a, b) => a - b)도 정렬된 새 배열을 돌려줍니다. 아래 활동은 같은 입력을 복사해 기본 정렬·숫자 오름차순·숫자 내림차순을 각각 실행합니다. 원본과 결과를 나란히 보면 비교 기준에 따른 차이를 확인할 수 있습니다.

참고 · MDN Web Docs — 원본을 보존하는 배열 정렬 ↗

04

AI가 만든 정렬 코드는 어떤 수로 확인하나요?

[2, 10, 1]을 넣으면 기본 정렬은 [1, 10, 2], 숫자 오름차순은 [1, 2, 10]이 됩니다. 자릿수가 다른 수가 들어 있어 두 규칙의 차이가 드러납니다. 음수와 중복값을 넣은 [-2, 3, 3, 10]도 실행해 보세요. 숫자 오름차순에서는 -2가 맨 앞에 오고 3 두 개가 그대로 남아야 합니다.

결과를 읽을 때는 이웃한 두 수의 크기를 차례로 비교합니다. 오름차순이라면 앞의 수가 뒤의 수와 같거나 작아야 합니다. 입력에 있던 값과 개수도 유지되는지 확인해 보세요. 원본 보존이 필요한 작업에서는 정렬을 마친 뒤 원본 배열의 순서까지 살피면 됩니다.

참고 · MDN Web Docs — 배열의 기본 정렬과 비교 함수 ↗

직접 확인하기 · 규칙 기반 실행

같은 숫자를 세 가지 기준으로 정렬하면 어떻게 되나요?

입력한 숫자를 복사한 뒤 기본 정렬, 숫자 오름차순, 숫자 내림차순을 각각 실행합니다. 숫자와 그 개수를 확인하고 정렬 전 배열이 보존되는지도 살펴보세요.

같은 숫자를 세 가지 규칙으로 정렬해 볼까요?

숫자를 쉼표로 나누어 20개까지 적을 수 있습니다. 음수와 소수도 됩니다. 예: 3, -2, 1.5

입력한 원본: [3, 21, 100, 4]

기본 정렬

[...원본].sort()

[100, 21, 3, 4]

각 숫자를 문자열로 읽어 순서를 비교합니다.

숫자 오름차순

[...원본].sort((a, b) => a - b)

[3, 4, 21, 100]

숫자 내림차순

[...원본].sort((a, b) => b - a)

[100, 21, 4, 3]

기본 정렬에서 비교하는 문자열: ["3","21","100","4"]

각 결과는 원본을 복사해서 계산하므로 위 원본 배열은 유지됩니다. 이 활동은 유한한 자바스크립트 숫자(Number)를 다룹니다. 따옴표로 감싼 문자열이나 NaN은 입력 범위에서 제외합니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1[2, 10, 1]에 비교 함수 없이 sort()를 실행하면 어떤 결과가 나오나요?
2유한한 숫자 배열 numbers의 원본을 보존하면서 오름차순 결과를 얻는 코드는 무엇인가요?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

저장 위치를 확인하고 있습니다…

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. 배열의 기본 정렬과 비교 함수 ↗MDN Web DocsArray.prototype.sort()

    기본 UTF-16 코드 단위 비교, 원본 배열의 제자리 변경, 비교 결과의 부호 · 2026-10-24 원문 확인. 설명·활동·문항은 자체 제작.

  2. 원본을 보존하는 배열 정렬 ↗MDN Web DocsArray.prototype.toSorted()

    정렬된 새 배열 반환과 비교 함수 · 2026-10-24 원문 확인. 설명·활동·문항은 자체 제작.

  3. 배열 정렬의 표준 절차 ↗Ecma TC39ECMAScript Language Specification, Array.prototype.sort / CompareArrayElements

    비교 함수 반환값, 기본 문자열 비교, 안정 정렬의 요구 조건 · 2026-10-24 원문 확인. 설명·활동·문항은 자체 제작.