알고리즘
[알고리즘] 프로그래머스 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를 걸어 루프를 멈춰주었다.