출처:https://school.programmers.co.kr/learn/courses/30/lessons/181881
문제
풀이
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 |