자바스크립트 코딩테스트 강좌, 수 정렬하기 2

자바스크립트 코딩테스트 강좌 – 수 정렬하기 2

이번 강좌에서는 ‘수 정렬하기 2’라는 알고리즘 문제를 깊이 있게 분석하고, 이를 해결하기 위한 단계적 과정을 설명하겠습니다. 문제의 정의와 함께 JavaScript를 활용하여 문제를 해결하는 방법을 살펴보도록 하겠습니다.

문제 정의

문제는 다음과 같습니다. 수가 주어졌을 때, 이 수들을 오름차순으로 정렬하는 프로그램을 작성하시오. 여기서 주의할 점은 수의 개수가 최대 10,000개까지 가능하다는 것입니다. 아래에 정확한 입력 및 출력 형식, 그리고 예시를 제공하겠습니다.

입력

첫 줄에는 수의 개수 N(1 ≤ N ≤ 10,000)이 주어집니다. 이후 N개의 줄에 걸쳐 한 줄에 하나씩 정수를 입력받습니다. 이 정수는 -1,000,000 이상 1,000,000 이하입니다.

출력

입력받은 정수를 오름차순으로 정렬하여 한 줄에 하나씩 출력해야 합니다.

예제 입력

5
5
3
2
1
4

예제 출력

1
2
3
4
5

문제 접근

이 문제의 핵심은 주어진 N개의 정수를 정렬하는 것입니다. 여기서 사용할 수 있는 방법은 다양하지만, 일반적으로 효율적인 방식으로 정렬 알고리즘을 선택하는 것이 중요합니다. JavaScript에서는 대표적으로 Array.sort() 메서드를 사용할 수 있습니다.

Array.sort() 메서드는 기본적으로 문자열 정렬을 수행하기 때문에, 실제 정수를 정렬하려면 비교 함수가 필요합니다. 자바스크립트에서 내장된 sort() 메서드를 사용하여 정렬할 때는 주의가 필요합니다. 특히, 대량의 수를 처리할 때는 시간 복잡도에 유의해야 합니다.

해결 방법

이제 문제를 해결하는 과정을 단계적으로 알아보겠습니다.

  1. 입력 데이터를 준비합니다.

    우선 문제가 제시한 입력 데이터를 읽어 들이기 위해 필요한 변수를 선언하고, 입력받을 데이터를 배열로 저장합니다. 이때 JavaScript의 Array를 이용하여 동적으로 수를 저장할 것입니다.

  2. 입력된 수를 정렬합니다.

    Array.sort() 메서드를 사용하여 입력된 배열을 정렬합니다. 이때 비교 함수를 정의하여 숫자 비교를 할 수 있도록 합니다.

  3. 정렬된 수를 출력합니다.

    정렬된 배열의 값을 출력하는 함수 또는 메서드를 사용하여 정렬된 수들을 한 줄에 하나씩 출력합니다.

JavaScript 코드 구현

위의 해결 방법을 바탕으로, 다음과 같이 JavaScript 코드를 구현할 수 있습니다:


function sortNumbers(input) {
  const N = parseInt(input[0]); // 첫 줄은 수의 개수
  const numbers = input.slice(1, N + 1).map(Number); // 나머지 N개의 수를 정수로 변환하여 배열에 저장

  numbers.sort((a, b) => a - b); // 오름차순 정렬

  return numbers.join('\\n'); // 정렬된 수를 한 줄씩 출력할 수 있도록 반환
}

// 예시 입력
const input = [
  '5',
  '5',
  '3',
  '2',
  '1',
  '4'
];

console.log(sortNumbers(input)); // 결과 출력

코드 설명

위 코드의 각 부분에 대해 좀 더 자세히 살펴보겠습니다:

  • 입력 처리: parseInt(input[0])를 사용하여 첫 번째 줄에서 수의 개수를 가져옵니다. input.slice(1, N + 1)는 첫 번째 줄을 제외한 숫자들을 선택하며, map(Number)를 통해 문자열 배열을 숫자 배열로 변환합니다.
  • 정렬: numbers.sort((a, b) => a - b)는 두 숫자를 비교하여 오름차순으로 정렬합니다. 이때 a - b를 리턴하여 첫 번째 인수가 두 번째 인수보다 작으면 음수를, 크면 양수를, 같으면 0을 반환하도록 합니다.
  • 출력 처리: join('\\n')는 배열의 각 요소를 줄바꿈 문자로 연결하여 문자열을 생성합니다. 최종적으로 이를 출력할 수 있습니다.

테스트 케이스

정의한 코드를 사용하여 몇 가지 테스트 케이스를 고려해 볼 수 있습니다:

테스트 케이스 1

입력:
5
5
3
2
1
4

출력:
1
2
3
4
5

테스트 케이스 2

입력:
4
10
30
20
40

출력:
10
20
30
40

테스트 케이스 3

입력:
3
-1
-5
2

출력:
-5
-1
2

덧붙이는 말씀

이번 강좌를 통해 ‘수 정렬하기 2’ 알고리즘 문제를 해결하는 방법을 배워보았습니다. 다양한 정렬 알고리즘을 활용할 수 있지만, 문제의 범위와 요구 사항에 맞추어 적절한 알고리즘을 선택하는 것이 중요합니다. 또한, JavaScript의 강력한 기능을 활용하면 이를 효율적으로 구현할 수 있습니다.

앞으로도 다양한 알고리즘 문제 해결 방법을 공유할 예정이니 꾸준한 관심 부탁드립니다. 잘 정리된 문제 풀이 실력으로 취업의 문을 열어보세요!