요즘 많은 회사들이 코딩테스트를 통해 지원자의 알고리즘과 문제 해결 능력을 평가하고 있습니다. 이번 시간에는 카드 정렬하기라는 주제를 가지고, 문제를 해결하는 과정을 같이 살펴보도록 하겠습니다. 카드 정렬하기는 아주 간단하면서도 자주 출제되는 문제 중 하나로, 알고리즘과 데이터 구조의 기본적인 이해가 필수적입니다.
문제 설명
카드게임을 위해 각 카드의 번호가 적힌 카드들을 정렬하려고 합니다. 카드의 개수는 N
개이고, 각 카드에는 1
부터 N
까지의 정수 번호가 적혀 있습니다. 주어진 카드 배열을 오름차순으로 정렬한 후 카드의 최종 배열 상태를 출력해야 합니다.
입력 형식
첫 줄에 카드의 개수 N
(1 ≤ N ≤ 1000
)이 주어지고, 두 번째 줄에 카드의 번호가 공백으로 구분되어 주어집니다.
출력 형식
정렬된 카드의 번호를 공백으로 구분하여 출력합니다.
예제 입력
5 3 2 1 4 5
예제 출력
1 2 3 4 5
문제 접근 방법
문제를 해결하기 위해 다음과 같은 접근 방법을 사용할 수 있습니다.
- 입력 데이터 수집: 카드의 개수와 카드의 번호를 입력받습니다.
- 정렬 알고리즘 선택: 자바스크립트의 내장 메서드를 활용하여 배열을 정렬합니다.
- 출력 형식에 맞게 데이터 출력: 정렬된 배열을 출력합니다.
코드 작성
이제 본격적으로 코드를 작성해보겠습니다. 다음은 카드 정렬하기 문제를 해결하기 위한 자바스크립트 코드입니다.
function sortCards(cards) {
return cards.sort((a, b) => a - b);
}
function main() {
const n = parseInt(prompt("카드의 개수를 입력하세요:")); // 카드를 입력받기 위한 프롬프트
const cardsInput = prompt("카드 번호를 입력하세요 (공백으로 구분):"); // 카드 번호 입력
const cards = cardsInput.split(" ").map(Number); // 공백으로 구분된 문자열을 정수 배열로 변환
const sortedCards = sortCards(cards); // 정렬 메서드 호출
console.log(sortedCards.join(" ")); // 정렬된 카드 출력
}
main();
코드 설명
작성한 코드의 각 부분에 대해 설명하겠습니다.
sortCards 함수
sortCards
함수는 카드 번호 배열을 받아서 오름차순으로 정렬하여 반환합니다. 자바스크립트의 내장 메서드인 sort
를 사용하였고, 숫자의 크기를 비교하기 위한 화살표 함수를 이용하였습니다.
main 함수
main
함수에서는 다음과 같은 작업을 수행합니다:
prompt
를 이용해 카드의 개수를 입력받습니다.- 다시
prompt
를 통해 카드 번호를 입력받아 문자열로 전달합니다. split
메서드를 사용하여 공백으로 구분된 문자열을 배열로 변환하고,map
메서드를 이용하여 각 요소를 숫자로 변환합니다.sortCards
함수를 호출하여 정렬된 배열을 얻습니다.- 결과를
join
메서드를 사용하여 문자열로 변환한 후 콘솔에 출력합니다.
테스트 및 검증
작성한 코드를 테스트하여 다양한 입력에 대해 올바르게 작동하는지 검증해보겠습니다.
테스트 케이스 1
입력: 5 3 2 1 4 5 출력: 1 2 3 4 5
테스트 케이스 2
입력: 4 8 3 5 2 출력: 2 3 5 8
결론
이번 강좌에서는 카드 정렬하기 문제를 통해 자바스크립트의 배열 메서드를 활용하여 문제를 해결하는 방법을 살펴보았습니다. 또한, 코드 작성을 통해 접근 방식과 각 함수의 역할을 이해하는 시간을 가졌습니다. 이와 같은 문제들은 알고리즘 시험에서 자주 출제되므로, 연습을 통해 문제 해결 능력을 향상시키는 것이 중요합니다.
추가적인 자료
더욱 심화된 알고리즘 문제를 연습하기 원하시는 분들은 아래 링크를 참고하시기 바랍니다:
- LeetCode – 다양한 알고리즘 문제를 제공합니다.
- HackerRank – 알고리즘 및 데이터 구조 문제를 제공합니다.
- Codewars – 다양한 난이도의 문제를 제공하며, 커뮤니티와 상호작용할 수 있습니다.
이상으로 자바스크립트 코딩테스트 강좌를 마치겠습니다. 성공적인 코딩테스트 준비를 위해 항상 노력을 기울이시기 바랍니다!