Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Nextjs
- 노드
- 타입스크립트
- 앵귤러
- TypeScript
- npm
- angular
- 에러
- error
- Method
- 노드js
- 백엔드
- node
- react
- Javascript
- Reduce
- slice
- CLI
- nodejs
- 프로그래머스
- 자바스크립트
- 개발
- 코딩테스트
- 마음커넥션
- indexOf
- Programmers
- 노드제이에스
- codingtest
- 코딩테스트연습
- Array
Archives
- Today
- Total
Suzie's Blog
[프로그래머스] 조건에 맞게 수열 변환하기 2 (JavaScript) 본문
반응형
SMALL
문제 설명
정수 배열 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
입출력 예
arr result [1, 2, 3, 100, 99, 98] 5
입출력 예 설명
입출력 예 #1
위 작업을 반복하면 다음과 같이 arr가 변합니다.
이후로 arr가 변하지 않으며, arr(5) = arr(6)이므로 5를 return 합니다.
반복 횟수 arr 0 [1, 2, 3, 100, 99, 98] 1 [3, 2, 7, 50, 99, 49] 2 [7, 2, 15, 25, 99, 99] 3 [15, 2, 31, 51, 99, 99] 4 [31, 2, 63, 51, 99, 99] 5 [63, 2, 63, 51, 99, 99] 6 [63, 2, 63, 51, 99, 99]
풀이
할 수 있다고 생각했는데 결국 chatGPT의 도움을 받아 겨우 해결한 문제 ㅠㅠ
그러므로 풀이법만 작성하도록 하겠다!
let currentArray = [...arr]; // arr를 currentArray로 복사
let previousArray = []; // 이전 배열 초기화
let answer = 0; // 반환할 결과값
while(previousArray !== currentArray.toString()) {
previousArray = currentArray.toString(); // 이전 배열 업데이트
for(let i=0; i < currentArray.length; i++) {
if(currentArray[i] >= 50 && currentArray[i] % 2 === 0) {
currentArray[i] /= 2;
} else if (currentArray[i] < 50 && currentArray[i]%2 !== 0){
currentArray[i] = currentArray[i] * 2 + 1;
}
}
answer++; //반복횟수 증가
}
console.log(answer - 1)
1. 배열이 같은지 비교하는 방법으로는 배열을 string화 시켜서 검사했다. (toString() 사용)
2. while을 사용하여 previousArray가 currentArray.toString()과 같아질 때까지 반복을 한다.
3. while안에 for문을 활용한 반복문을 만들어 currentArray의 배열을 해당조건에 맞게 업데이트 해준다.
4. while loop이 멈출 때 까지 answer이 증가된다
5. currentArray.toString()과 previousArray가 같아지면 반복이 멈추고 answer를 return한다
이렇게 차근차근 분석해보니 풀리는데 나름 복잡했던 문제였던 것 같다.
다음에 같은 문제를 풀어봤을땐 헤메지 않고 풀 수 있길!!
반응형
LIST
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 옹알이 (JavaScript) (2) | 2025.01.15 |
---|---|
[프로그래머스] 간단한 논리 연산 (JavaScript) (0) | 2023.11.28 |
[프로그래머스] 세 개의 구분자 (JavaScript) (2) | 2023.11.24 |
[프로그래머스]특정 문자열로 끝나는 가장 긴 부분 문자열 찾기(JavaScript) (feat. lastIndexOf) (0) | 2023.11.21 |
[프로그래머스] 문자열이 몇 번 등장하는지 세기(JavaScript) (0) | 2023.11.17 |