연습장
54. 조건에 맞게 수열 변환하기 2 본문
Q. 정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
주어진 배열의 원소에 대해서
50 이상이면서 짝수이면 2로 나누고
50 미만이면서 홀수이면 2를 곱하고 1 을 더한다.
위의 과정을 모든 원소에 1번씩 적용한것을 arr(1) 이라 하며
더이상 배열의 원소가 변하지 않는 배열이 되는 arr(i) = arr(i+1) 인 i 를 구하는 문제이다.
먼저 배열이 변하도록 하기 위해서
map 함수를 이용하여 진행하였다.
' 50 이상이면서 && 짝수인가 ? 참이면 / 2 를 진행 :
거짓이라면 50 미만 && 홀수인가 ? 참이면 *2 + 1 을 진행 : 아니라면 num 그대로 ' 를 반환 하여 다시 배열로 만든 것을 arr 에 저장(갱신) 하였다.
그리고 기존 배열과 바뀐 배열을 비교하기 위해서 저장 할 필요를 느꼈고
ans 라는 배열에 각각의 arr(i) 를 저장하였다.
ans = [ arr[0] , arr[1] , arr[2] , .... ]
맨 처음 기존 배열을 push 하고
map 함수를 통해 새로 갱신된 arr(1) 함수를 arr 에 다시 push 하게되면
ans = [ arr[0] , arr[1] ] 상태가 되고
if 문을 이용하여 배열을 비교하는데 , 배열끼리는 비교가 안되서 문자열로 바꿔서 비교했다.
결과가 참이면 break 하도록하고 거짓이면 다시 while 문을 통해 반복하여
배열을 새로 갱신 arr[2] 를 구해서 ans 에 push 하도록 한다.
이를 반복하여 배열이 같게되면 if 문의 break 을 통해 while 문에서 나오게 되고
그때 i 값을 이용하여 원하는 값을 구했다.
'프로그래머스 > 0단계' 카테고리의 다른 글
56. 간단한 식 계산하기 (0) | 2023.07.11 |
---|---|
55. 대문자로 바꾸기 (0) | 2023.07.11 |
53. 왼쪽 오른쪽 (0) | 2023.07.10 |
52. 배열 조각하기 (0) | 2023.07.10 |
51. 2의 영역 (1) | 2023.07.10 |