안녕하세요, 여러분! 이번 블로그 포스트에서는 자바스크립트를 이용한 코딩 테스트 알고리즘 문제, “조약돌 꺼내기”에 대해 깊이 있게 살펴보도록 하겠습니다. 이 문제는 자료구조와 알고리즘을 이해하는 데 큰 도움이 될 것입니다. 자, 그럼 문제를 정의해보겠습니다.
문제 정의
어떤 봉지에 여러 개의 조약돌이 들어있습니다. 모든 조약돌은 번호가 붙어있고, 특정 조건을 만족하는 조약돌을 꺼내어야 합니다. 조약돌은 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
값보다 큰 조약돌의 개수를 세는 함수를 작성하시오.
이 문제를 풀기 위해서는 단순히 조건만 변경하면 됩니다. 여러분의 코드에서 어떤 변화가 필요한지 고민해보세요!