fun1ty / codingtest_study

0 stars 0 forks source link

조건에 맞게 수열 변환하기 2 #2

Open fun1ty opened 1 year ago

fun1ty commented 1 year ago
문제 설명

정수 배열 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
  • 이후로 arr가 변하지 않으며, arr(5) = arr(6)이므로 5를 return 합니다.
fun1ty commented 1 year ago

정답코드(+5)

def solution(arr):
    count=0
    before = arr[:]
    i=0
    ch=[0]*len(arr)
    while 1:
        if i==len(arr):
            for x in range(len(arr)):
                if before[x]==arr[x]:
                    ch[x]=1
                else:
                    before[x]=arr[x]
            i=0
            count+=1
            if sum(ch) ==len(arr):
                return count-1
                break
        else:
            if arr[i]>=50 and arr[i]%2==0:
                arr[i]=int(arr[i]/2)
            elif arr[i]<50 and arr[i]%2==1:
                arr[i]=int(arr[i]*2)+1
            i+=1
fun1ty commented 1 year ago

리스트 복사하는 방법

  1. 슬라이싱
    list2 = list1[:]
  2. list함수
    list2 = list(list1)
  3. 리스트 연산 : []로 빈 리스트를 생성한 후 list1을 빈 리스트에 넣어주는 형태
    list2 = [] + list1
  4. copy()메소드
    list2 = list1.copy()
bejeyon commented 1 year ago

class Solution { public int solution(int[] arr) { int loop = 0; while (true) { int index = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] >= 50 && arr[i] % 2 == 0) { arr[i] /= 2; index++; continue; } if (arr[i] < 50 && arr[i] % 2 == 1) { arr[i] = arr[i] * 2 + 1; index++; continue; } } if (index != 0) { loop++; continue; } break; }

    int answer = loop;
    return answer;
}

}