알고리즘

[알고리즘] 프로그래머스 LV.0 - 조건에 맞게 수열변환2

로돌씨 2024. 5. 26. 20:33

출처:https://school.programmers.co.kr/learn/courses/30/lessons/181881

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

풀이

function solution(arr) {
    let idx = 0
    let prevArr = arr
    
    //무한루프를 시작함(true일때에 계속 반복하므로)
    while(true) {
        // 현재 배열을 조건에 맞게 변환
        const changeCurArr = prevArr.map(a => {
            if(a >= 50 && a%2 === 0) return a/2
            if(a < 50 && a%2 === 1) return a*2+1
            return a
        })
        console.log(changeCurArr)
        // 이전의 모든 배열과 현재 모든 배열의 요소 비교
        //array.every() -> 모든 요소를 비교해서 값이 같을때에 true를 반환함
        const isAllSame = prevArr.every((a, i) => a === changeCurArr[i])
        //isAllSame 이 ture일 경우에 루프를 종료함
        if(isAllSame) break
        idx+=1
        // 현재 배열을 이전 배열 변수에 저장함
        prevArr = changeCurArr
        
        //루프를 계속 돌면서 changeCurArr에 새로운 값을 할당시켜 줌으로써 따로 정해길이가 정해져있지 않은 상황이나 , 그 길이를 찾아야하는 경우에 while문 사용
     
    }
    
    return idx
}

for문을 사용했더니 길이를 어떻게 지정해야 할지 잘 몰랐다. 

while(true) 를 사용하니 무한루프를 타고 계속 반복실행하였으며 , isAllSame 함수가 true일때에(전의 배열과 바뀐 배열이 같을때에)

break를 걸어 루프를 멈춰주었다.

 

'알고리즘' 카테고리의 다른 글

[BOJ] 2581번 - 소수(JS)  (0) 2024.05.28
[BOJ]2292번 - 벌집(JS)  (0) 2024.05.26
[BOJ]2720번 - 세탁소 사장 동혁(JS)  (0) 2024.05.22
[BOJ] 25206번 - 너의 평점은(JS)  (0) 2024.05.19
[BOJ]2941번 - 크로아티아 알파벳  (0) 2024.05.17