자바스크립트 코딩테스트 강좌, 조약돌 꺼내기

안녕하세요, 여러분! 이번 블로그 포스트에서는 자바스크립트를 이용한 코딩 테스트 알고리즘 문제, “조약돌 꺼내기”에 대해 깊이 있게 살펴보도록 하겠습니다. 이 문제는 자료구조와 알고리즘을 이해하는 데 큰 도움이 될 것입니다. 자, 그럼 문제를 정의해보겠습니다.

문제 정의

어떤 봉지에 여러 개의 조약돌이 들어있습니다. 모든 조약돌은 번호가 붙어있고, 특정 조건을 만족하는 조약돌을 꺼내어야 합니다. 조약돌은 n개의 숫자로 표현되며, 각 숫자는 해당 조약돌의 고유 ID를 나타냅니다.

당신의 임무는 주어진 조약돌 배열 rocks와 정수 k가 주어졌을 때, 숫자 k보다 작은 조약돌의 개수를 반환하는 것입니다. 배열의 길이는 1 이상 1000 이하이며, 각 조약돌의 ID는 1 이상 10,000 이하입니다.

예를 들어:

  • 입력: rocks = [5, 2, 8, 3, 6], k = 4
  • 출력: 2 (조약돌 ID: 2, 3)

문제 해결 전략

이 문제를 해결하기 위해 우리는 기본적인 배열 탐색 기법을 사용할 것입니다. 다음의 단계를 밟아 해결해 나가겠습니다.

1. 배열 탐색

주어진 배열 rocks를 순회하면서 각 조약돌의 ID가 k보다 작은지 검사합니다. 이 조건이 만족하면 카운트를 증가시킵니다.

2. 카운트 반환

모든 조약돌을 검토한 후, 최종적으로 카운트를 반환합니다.

자바스크립트 코드 구현

이제 위 방안을 바탕으로 자바스크립트 함수를 작성해보겠습니다:

function countRocks(rocks, k) {
    let count = 0;
    for (let i = 0; i < rocks.length; i++) {
        if (rocks[i] < k) {
            count++;
        }
    }
    return count;
}

// 예제 사용
const rocks = [5, 2, 8, 3, 6];
const k = 4;
console.log(countRocks(rocks, k)); // 출력: 2

코드 분석

위 코드에서 countRocks 함수는 두 개의 매개변수를 받습니다: rocks 배열과 k 값입니다. 우리는 let count = 0;로 카운트를 초기화하고, for 루프를 통해 배열을 순회합니다. 각 조약돌의 ID가 k보다 작다면, count를 증가시킵니다. 마지막으로, 카운트를 반환합니다.

시간 복잡도 분석

이번 문제의 시간 복잡도는 O(n)입니다. 배열의 모든 요소를 한 번씩만 확인하므로, 선형적인 시간 복잡도를 가지고 있습니다.

결론

오늘의 문제, “조약돌 꺼내기”를 통해 우리는 배열 탐색의 기초를 다지고, 효율적인 알고리즘을 설계하는 방법을 배웠습니다. 이러한 문제들은 코딩 테스트에서 자주 접하게 될 것이며, 기본기를 다지는 데 매우 중요한 역할을 합니다. 여러분도 다양한 문제를 풀어보며 경험을 쌓으시길 바랍니다!

연습 문제

이제 여러분의 실력을 테스트해 볼 차례입니다. 다음과 같은 변형 문제를 풀어보세요.

  • 변형 문제: 주어진 rocks 배열에서 k 값보다 큰 조약돌의 개수를 세는 함수를 작성하시오.

이 문제를 풀기 위해서는 단순히 조건만 변경하면 됩니다. 여러분의 코드에서 어떤 변화가 필요한지 고민해보세요!