[프로그래머스] lv1. 조건에 맞게 수열 변환하기 2 / Javascript
반응형
[프로그래머스] lv1. 조건에 맞게 수열 변환하기 2 / Javascript

1. 문제
정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다. 이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요. 단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
제한사항
1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
입출력 예

2. 풀이
function solution(arr) {
let i = 0;
let flag = true;
while (flag) {
flag = false;
const nextArr = arr.map(v => {
if(v >= 50 && v % 2 === 0) {
return v / 2
}
if (v < 50 && v % 2 === 1) {
return (v * 2) + 1
}
return v;
});
for (let k=0; k<arr.length; k++) {
if (nextArr[k] !== arr[k]) {
flag = true;
i++;
arr = nextArr;
break;
}
}
}
return i;
}
3. 시간복잡도
O(n * x)
- x는 문제 데이터에 따라 다름
- n = 1,000,000일 때
- x = 20~50회 정도 반복된다면
- 대략 2천만~5천만 연산 수준 → JS로도 1초 이내 가능
즉, n은 크지만 x가 보통 작기 때문에 이 코드는 실질적으로 충분히 통과할 수 있다.
반응형
'프로그래밍 > Algorithm' 카테고리의 다른 글
| [프로그래머스] lv1. 없는 숫자 더하기 / Javascript (0) | 2025.04.28 |
|---|---|
| [프로그래머스] lv1. 문자열 묶기 / Javascript (0) | 2025.04.28 |
| [프로그래머스] lv1. 특별한 이차원 배열 1 (0) | 2025.04.28 |
| [Softeer] lv1. 나무심기 / Javascript (0) | 2025.04.28 |
| [프로그래머스] lv1. 없는 숫자 더하기 / Javascript (0) | 2025.04.26 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] lv1. 없는 숫자 더하기 / Javascript
[프로그래머스] lv1. 없는 숫자 더하기 / Javascript
2025.04.28 -
[프로그래머스] lv1. 문자열 묶기 / Javascript
[프로그래머스] lv1. 문자열 묶기 / Javascript
2025.04.28 -
[프로그래머스] lv1. 특별한 이차원 배열 1
[프로그래머스] lv1. 특별한 이차원 배열 1
2025.04.28 -
[Softeer] lv1. 나무심기 / Javascript
[Softeer] lv1. 나무심기 / Javascript
2025.04.28