[PS] Programmers/코딩 기초 트레이닝/ Day15/조건에 맞게 수열 변환하기 2
2023. 5. 25. 13:50ㆍ✨ PS(ProblemSolving)
문제
정수 배열 arr가 주어집니다. arr의 각 원소에 대해
조건1) 값이 50보다 크거나 같은 짝수라면 2로 나누고,
조건2) 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때,
조건3) arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
문제 해결 전략
조건3을 만족 할 때까지 조건 1,2를 반복하는 while 루프를 만들어줌
루프가 돌 때마다 count를 추가하여 조건3을 만족하는 순간 count를 반환함.
답안
답안1
function solution(arr) {
var count = 0;
while (true) {
var nextArr = arr.map(function(num) {
if (num >= 50 && num % 2 === 0) {
return num / 2;
} else if (num < 50 && num % 2 === 1) {
return num * 2 + 1;
} else {
return num;
}
});
count++;
if (nextArr.every(function(num, index) { return num === arr[index]; })) {
break;
}
arr = nextArr;
}
return count - 1;
}답안2: 좀 더 간결함
function solution(arr, n = 0) {
while(!arr.every(x => (x >= 50 && x % 2 === 1) || (x < 50 && x % 2 === 0))) {
arr = arr.map(x => {
if (x >= 50 && x % 2 === 0) return x / 2
if (x < 50 && x % 2 === 1) return x * 2 + 1
retrun x
})
n++
}
return n
}
매서드 정리: .every()
arr.every(callbackFunction)
배열 안에 있는 모든 요소에 대해 callback함수 조건을 검사함. callback함수는 boolean 값을 반환해야함.
[https://terryehlee.tistory.com/60]
'✨ PS(ProblemSolving)' 카테고리의 다른 글
| [PS]Programmers/코딩테스트연습/연습문제/Lv1: 자연수 뒤집어 배열로 만들기 (0) | 2023.06.22 |
|---|---|
| [PS] Programmers/코딩기초트레이닝/Day20: 문자열 묶기 (0) | 2023.06.09 |
| [PS]Programmers/코딩테스트 연습/코딩테스트 입문/최빈값 구하기 (0) | 2023.05.24 |
| [PS]Programmers/코딩테스트 연습/연습문제/문자열 내 마음대로 정렬하기 (0) | 2023.05.23 |
| [PS]Programmers/코딩테스트입문/Lv0/Day15: 한번만 등장한 문자 (0) | 2023.05.04 |