본문 바로가기
깃허브 링크!
프로그래머스

자바스크립트 프로그래머스

처음에 for문은 문자열길이

두번째 for문은 반복횟수

 

"hello"라는 문자열은 'h', 'e', 'l', 'l', 'o' 총 5개의 문자로 이루어져 있습니다.

따라서 'my_string.length'는 5를 반환한다.

 

my_string[i]는 문자열 my_string의 인덱스 i에 해당하는 문자를 가져오는 것

문자열은 문자의 배열로 이루어져서 각 문자에는 해당하는 인덱스가 있다.

예를 들어 my_string이 "hello"일때 my_string[0]은 "h"

 


주어진 배열 array 길이가 4이므로 array.length는 4가 된다.

array[143,233,...]

배열의 인덱스는 0부터 시작하기 때문에 array[0]은 143이 된다.

 

 

 


 

minNumber는 임의로 1000으로 주었는데 배열중에서는 1000보다 당연히

큰게 나올수가 없고 배열안의 모든 경우의수를 판별해주는 식이다.

처음에는 배열의 인덱스 0번째가 들어오고 그 0번째를 1번째랑 2번째 계속 비교해서

0보다 작은게 나오면 교체하는 방식이다.


하지만 배열안의 인덱스가 몇개나 있는지 모르는데 위의 코드처럼

인덱스 0부터 계속 써주는게 불편하고 아닌것을 아니까

cnt라는 변수를 만들어서 0,1,2,3,4를 저장할 변수 생성

while  문을 사용해서 cnt증가

 


cnt2라는 변수를 새로 생성해서 cnt1하고 비교를 하는데

찾은 최솟값은 newArray에 push 해놓고 

cnt1에서 나온 최솟값하고 cnt2에서 array배열중의 최솟값을 비교해서 찾는 

최솟값이 나오게 된다면 break로 중단시킨다.

 


// 입력은[9,-1,0]

function solution(array){
    
    let arrayCnt = 0;
while(arrayCnt < array.length){
    let minNumber = 1000;
    let newArray = [];
    let cnt = 0;
    while(cnt<array.length){
        if(minNumber>array[cnt]){
            minNumber = array[cnt];
}
    
        
        cnt=cnt+1;
    }
    

//minNumber <- 최소값
newArray.push(minNumber);



let cnt2 = 0;
while(cnt2<array.length){
    if(minNumber === array[cnt2]){
        array[cnt2] = 1000;
        break;
        // break를 사용해서 반복문 멈추기
        // [9,-1,0]에서 -1이랑 비교했을때 애도 -1이니까 최솟값이야
    }
    cnt2 = cnt2 + 1
}
arrayCnt = arrayCnt + 1;
}
return 0;
}


// 1.정렬
//1-1 배열 중 가장 작은 값을 넣는다.
//1-2 찾으면 새 배열에 넣는다.
//1-3 원래 배열에 찾은 값은 지운다.(절대로 걸리지 않는 큰 숫자로 변경한다.)
//1-4 만약 원래배열 길이만큼 반복했으면 끝낸다. 아니면 1-1로 돌아간다.

맨 상단에 코드 

let arrayCnt = 0;

while(arrayCnt < array.length)

 

맨 하단에 코드

arrayCnt = arrayCnt + 1;

 

이렇게 설정해줌으로 코드를 arrayCnt(배열 길이만큼)반복시킨다.

 

 

지금까지 한거면 반복문안에 반복문안에 반복문이 있는건데 자바스크립트 기능을 사용해서 간략하게 코드를 짤순 있지만 실력이 안느니까 생각하는 힘을 길러야 한다


// 입력은[9,-1,0]

function solution(array){
    
    let arrayCnt = 0;
    let newArray = [];
    while(arrayCnt < array.length){
        let minNumber = 1000;

            let cnt = 0;
            while(cnt<array.length){
                if(minNumber>array[cnt]){
                    minNumber = array[cnt];
        }
            cnt=cnt+1;
        }
    

        //minNumber <- 최소값
        newArray.push(minNumber);



        let cnt2 = 0;
        while(cnt2<array.length){
            if(minNumber === array[cnt2]){
                array[cnt2] = 1000;
                break;
                // break를 사용해서 반복문 멈추기
                // [9,-1,0]에서 -1이랑 비교했을때 애도 -1이니까 최솟값이야
            }
            cnt2 = cnt2 + 1
        }
        arrayCnt = arrayCnt + 1;
    }
    return newArray[Math.floor(array.length / 2)];
}


// 1.정렬
//1-1 배열 중 가장 작은 값을 넣는다.
//1-2 찾으면 새 배열에 넣는다.
//1-3 원래 배열에 찾은 값은 지운다.(절대로 걸리지 않는 큰 숫자로 변경한다.)
//1-4 만약 원래배열 길이만큼 반복했으면 끝낸다. 아니면 1-1로 돌아간다.

//2. 가운데 값 꺼내기
 let cnt = 0;
            while(cnt<array.length){
                if(minNumber>array[cnt]){
                    minNumber = array[cnt];
                }
                cnt=cnt+1;
            }

minNumber는 초기에는 1000이지만 if()괄호안의 절이 만족했을때 만약 1000>9라고 한다면

minNumber = array[cnt] 이 부분은 9 = array[cnt]  ==> true의 반환값이 나온다.

 

 

최솟값 순서대로 -1,0,9 차례로 들어온게 보이고

본래 [9,-1,0]에서 [9,1000,0]변형된것도 잘 확인되었다.

[1000,1000,1000]이 되면 기존에 정의해돈 let minNumber = 1000;하고 비교했을때 최소값을 더이상 찾을게 없으니까 함수를 종료시켜준다.

 


정수를 문자열로 변환후에 string으로 

문자열을 문자로 분리 split

다시 문자열을 숫자로 map(Number)

 

정수를 문자열로 변환한 이유는 숫자를 각 자리수로 분리하기 편하다.

 

그리고 위에

sumNumbers를 정의하려고 함수 생성

array.reduce(callback, initialValue)
callback: 각 요소를 처리하고 누적 값을 업데이트하는 콜백 함수
initialValue: 초기 누적 값으로 사용할 값 (선택적)

0은 reduce 메서드의 initialValue로 사용되는 초기 누적 값

'프로그래머스' 카테고리의 다른 글

자바스크립트 프로그래머스  (0) 2023.06.30
프로그래머스 2차원으로 만들기  (0) 2023.06.05
프로그래머스 개미군단  (0) 2023.06.01
프로그래머스  (0) 2023.05.30
코테  (0) 2023.04.10