---
# System prepended metadata

title: 자바스크립트 스터디 5일차

---

# 자바스크립트 스터디 5일차
## 문제1.
```javascript=
// 인사하기 함수
function greet(){
    console.log("안녕 내 이름은 제시카야")
}
// 매개변수 넣기
function greet(name){
    console.log('안녕 내 이름은'+name+'(이)야')
}
// name값 리턴
function greet(name){
    console.log('안녕 내 이름은'+name+'(이)야')
    return name;
}
```
## 문제2.
```javascript=
function meetAt(y,m,d){
    let year = y
    let month = m
    let date = d
    if(d!=null){ // 모든 값 다 잘 받아오면
        return `${year}/${month}/${date}`;
    }else if(m!=null){ // 년, 월 값만 받아올 경우
        return `${year}년 ${month}월`;
    }else{ // 년
        return `${year}년`;
    }
}
console.log(meetAt(2024,1,4))
```
## 문제3.
```javascript=
// 최소 숫자 찾기 함수
function findSmallestElement(arr) {
    // 배열 가져와서 오름차순 정렬
    const sortedArr = arr.slice().sort((a,b)=>a-b); 
    return sortedArr[0]||0; // 인덱스 첫번째 값 리턴
    // 자바스크립트에서는 하나라도 truty한 값이면 그 값을 선택하고
    // 둘다 'falsy'한 경우에만 두번 째 피연산자를 선택
    // '0'은 falsy한 값으로 간주
    // 배열이 비어 있는 경우 0이 선택되므로 둘다 falsy => 0 리턴
}
    let arr = [23,4,62,13,96]
    let result = findSmallestElementSort(arr);
    console.log(result) // 4
```
```javascript
// 선택 정렬 Select Sort
// 배열을 순회하면서 가장 작은 값을 찾아 해당 위치로 옮기는 정렬 방식
// ex) [1,4,2,3] [1,4,3,2] 
// 1번째 결과 : [1,4,2,3] [1,4,3,2] 
// 2번째 결과 : [1,2,4,3] [1,2,3,4] 
// 3번째 결과 : [1,2,3,4] [1,2,3,4] 
let arr = [1,4,2,3]
function SelectionSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
        
    let minIndex = i; // arr[i]를 최솟값으로 가정
      for (let j = i + 1; j < arr.length; j++) { 
            if (arr[j] < arr[minIndex]) { 
                minIndex = j;  
            }
          }
      [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];

  }
  return arr;
}
let result = SelectionSort(arr);
console.log(result[0]) // 1
```
```javascript
// 버블 정렬 Bubble Sort
// 인접한 두 수를 비교하여 큰 값을 뒤로 보내면서 정렬하는 방식
// ex) [4,3,2,1]
// 1번째 결과 : [3,4,2,1] [3,2,4,1] [3,2,1,4]
// 2번째 결과 : [2,3,1,4] [2,1,3,4]
// 3번째 결과 : [1,2,3,4]
let arr = [4,3,2,1]
function BubbleSort(arr) {
    for (let i = 0; i < arr.length - 1; i++) {
        
        for (let j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
            }
        }
        
    }
    return arr;
}
let result = BubbleSort(arr);
console.log(result[0]) // 1
```
```javascript
// 퀵정렬 Quick Sort
// 대량의 데이터에서 빠르게 정렬할 수 있음.
// pivot값이 최악으로 걸리면 엄청 오래 걸림
// ex) [78,23,13,98,62,4,39,84]
// [23,13,62,4] [78] [98,84]
// [13,4] [23] [62] [78] [84] [98]
// [4] [13] [23] [62] [78] [84] [98]
let arr = [78,23,13,98,62,4,96]
function quickSort(arr) {
    if (arr.length <= 1) {
        return arr; //배열의 길이가 1이되면 arr리턴
    }

    const pivot = arr[0]; // 기준값 설정
    const left = []; // 기준값 보다 작은 수 배열에 넣기
    const right = []; // 기준값 보다 큰 수 배열에 넣기

    for (let i = 1; i < arr.length; i++) { 
        // 기준값과 크기 비교하여 작으면 left, 크면 right에 넣음
        arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
    }
    
    //기준값은 가운데,
    //left의 길이가 1이 아니면 한번더 quickSort함수 실행
    //right도 마찬가지
    //left와 right의 길이가 1이 될때까지 계속해서 반복 실행하여 최종 연결
    return quickSort(left).concat(pivot, quickSort(right));
}
let result = quickSort(arr);
console.log(result[0]) // 4
```
```javascript
// 머지정렬 Merge Sort
// [3,9,2,7,4,6,0,5,1,8] 쪼개다보면
// [3][9] [2][7,4]   [6][0] [5][1,8]
//          [7][4]             [1][8]

// [3][9] [2][4,7]   [6][0] [5][1,8]
// [3,9][2,4,7]    [0,6][1,5,8]
// [2,3,4,7,9]    [0,1,5,6,8]
// [0,1,2,3,4,5,6,7,8,9]
function mergeSort(arr) {
    if (arr.length <= 1) {
        return arr;
    }
    
    //나누는 작업
    const mid = Math.floor(arr.length / 2);
    const left = arr.slice(0, mid);
    const right = arr.slice(mid);
    
    //단일 인자가 나올때까지 나눔
    return merge(mergeSort(left), mergeSort(right));
}

// 나누어진 배열 병합하기
function merge(left, right) {
    let result = [];
    let leftIndex = 0;
    let rightIndex = 0;

    while (leftIndex < left.length && rightIndex < right.length) {
        // 작은 수를 찾아서 result에 push
        if (left[leftIndex] < right[rightIndex]) {
            result.push(left[leftIndex]);
            leftIndex++;
        } else {
            result.push(right[rightIndex]);
            rightIndex++;
        }
    }
    // 결국 result에 작은 숫자 순으로 정렬
    // 마지막 한개의 숫자가 정렬이 안되는데 slice함수 사용해서 마저 붙임
    return result.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}
let result = mergeSort(arr);
console.log(result[0]) // 0
```
```javascript
// 힙정렬 Hip Sort 
// 이해를 못해서 고뇌 중입니다...
```

## 문제4.
```javascript=
// 아래 코드 더 줄여보기
function Exchange(m){ 
    const Money = [50000, 10000, 5000, 1000, 500, 100];
    const result = Money.map(Money => { // Map() 새로운배열 생성
        const count = Math.floor(m / Money); // 갯수 세기
        m %= Money; // 잔돈 Money로 업데이트
        return `${Money}원 x ${count}`;
    });
    console.log(result.join('\n')); // 줄바꿈 구분자, 문자열 결합 후 반환
}

// 화폐 교환 함수
function MoneyExchange(m){
    let a = Math.floor(m/50000) // 5만원권 개수
    let b = Math.floor((m%50000)/10000) // 1만원권 개수
    let c = Math.floor((m%10000)/5000) // 5천원권 개수
    let d = Math.floor((m%5000)/1000) // 1천원권 개수
    let e = Math.floor((m%1000)/500) // 500원 개수
    let f = Math.floor((m%500)/100) //100원 개수
   
    console.log(
        '50,000 x ' + a + '\n' +
        '10,000 x ' + b + '\n' +
        '5,000 x ' + c + '\n' +
        '1,000 x ' + d + '\n' +
        '500 x ' + e + '\n' +
        '100 x ' + f
    );
}

MoneyExchange(233700)
Exchange(233700)
```