문제 : 버블정렬
문제 설명
N 개의 숫자가 입력되면 오름차순으로 정렬하여 출력하는 프로그램을 작성하세요.
정렬하는 방법은 버블정렬입니다.
▣ 입력설명
첫 번째 줄에 자연수 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 자연수가 공백을 사이에 두고 입력됩니다. 각 자연수는 정수형 범위 안에 있습니다.
▣ 출력설명
오름차순으로 정렬된 수열을 출력합니다.
▣ 입력예제 1
6
13 5 11 7 23 15
▣ 출력예제 1
5 7 11 13 15 23
내코드
// 버블 정렬: 인접한 두 원소를 비교하며 자리를 바꿔 결국 순서대로 정렬하는 방식
function solution(arr) {
let answer = arr;
// 문자열 길이 만큼 순회 시작 값은 마지막 값부터 하나씩 줄여가 0 까지 진행
for (let i = answer.length - 1; i >= 0; i--) {
// 0 번째 값을 기준으로 i 번째까지 값을 비교해가며 값을 교환하는 반복과정
// 최종적으로 i 번째 값은 가장 큰 숫자가 오게된다.
let left = answer[0];
for (let j = 1; j <= i; j++) {
if (left > answer[j]) {
answer[j - 1] = answer[j];
answer[j] = left;
}
left = answer[j];
}
console.log(answer);
}
return answer;
}
let arr = [13, 22, 11, 7, 23, 15];
console.log(solution(arr));
풀이
- 문자열 길이 만큼 순회하되 마지막 값 i 부터 하나씩 줄여가 0 까지 진행
- 다음 값과 비교할 이전 값을 저장한 left 를 배열의 0 번째 값으로 초기화한 후 새로 j 는 1 부터 i 까지 1씩 증가하는 반복문 안에서 배열의 j 번째 값과 left 값을 비교해 left 값이 큰 경우 left 값 즉 이전값 배열의 j -1 번째 값과 j 번째 값을 교환 (left 는 이전 값을 가지고 있으므로 j -1 번째 값을 가지고 있다)
- 위 과정이 모두 끝나 정렬이 완료된 배열을 반환
보완할 수 있는 부분
// 기존코드
for (let i = answer.length - 1; i >= 0; i--) {
let left = answer[0];
for (let j = 1; j <= i; j++) {
if (left > answer[j]) {
answer[j - 1] = answer[j];
answer[j] = left;
}
left = answer[j];
}
console.log(answer);
}
// 보완코드
for (let i = arr.length - 1; i > 0; i--) {
console.log(i);
for (let j = 0; j < i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
console.log(arr);
}
두 값을 비교하기 위해 사용한 임시 변수 left 를 사용한 기존 방식에서 우측의 배열을 좌측에 배열에 구조분해 할당 하여 집어넣는 형태로 간단하게 변경
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : 삽입 정렬 (0) | 2024.01.09 |
---|---|
[JS] 코딩 테스트 문제 : Special Sort(구글 인터뷰) [버블정렬] (0) | 2024.01.09 |
[JS] 코딩 테스트 문제 : 선택 정렬 (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 교육과정 설계 [큐] (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 공주 구하기 [큐] (0) | 2024.01.08 |