문제 : 선택 정렬
문제 설명
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;
// 문자열 길이 만큼 순회
for (let i = 0; i < answer.length; i++) {
// i 번째 숫자 임시 변수 tempIdx 에 저장
let tempIdx = i;
// i 번째 이후 숫자들을 순회하면서 tempIdx 번째 숫자보다 작은 숫자일 경우 그 인덱스를 tempIdx 저장
// 최종적으로 tempIdx에 가장 작은 값을 가진 인덱스를 저장
for (let j = i + 1; j < answer.length; j++) {
if (answer[tempIdx] > answer[j]) tempIdx = j;
}
// tempIdx 인덱스 값과 i 번째 값을 서로 바꿈
let tempValue = answer[tempIdx];
answer[tempIdx] = answer[i];
answer[i] = tempValue;
}
return answer;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));
풀이
- 문자열 길이 만큼 순회하면서 i 번째 숫자 임시 변수 tempIdx 에 저장
- 새로 i + 1 번째 숫자들을 순회하면서 tempIdx 번째 숫자보다 작은 숫자일 경우 그 인덱스를 tempIdx 저장하고 최종적으로 tempIdx에 가장 작은 값을 가진 인덱스를 저장
- tempIdx 인덱스 값과 i 번째 값을 서로 바꿔 결국 최소값 순서대로 정렬됨
보완할 수 있는 부분
// 기존코드
let tempValue = answer[tempIdx];
answer[tempIdx] = answer[i];
answer[i] = tempValue;
// 보완코드
// 좌측 [arr[i], arr[tempIdx]] 부분은 각 배열의 주소를 나타내며 우측의 [arr[tempIdx], arr[i]] 배열의 값을 의미한다
// 우측의 배열을 좌측에 배열에 구조분해 할당 하여 집어넣는 형태의 코드
[arr[i], arr[tempIdx]] = [arr[tempIdx], arr[i]];
따로 임시로 변경할 값을 저장하는 변수를 통해 값을 교환하는 방식에서 배열의 주소와 값을 활용하는 방식으로 구조분해 할당 방식으로 값을 변경
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : Special Sort(구글 인터뷰) [버블정렬] (0) | 2024.01.09 |
---|---|
[JS] 코딩 테스트 문제 : 버블정렬 (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 교육과정 설계 [큐] (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 공주 구하기 [큐] (0) | 2024.01.08 |
[JS] 코딩 테스트 문제 : 쇠막대기 [스택] (0) | 2024.01.06 |