728x90
[파이썬] 프로그래머스 Lv0. 조건에 맞게 수열 변환하기 1, 조건에 맞게 수열 변환하기 2
안녕하세요. 머킹입니다.
오랜만에 프로그래머스 해보겠습니다!!
조건에 맞게 수열 변환하기 1
문제 설명
정수 배열 arr가 주어집니다.
arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다.
그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.
def solution(arr):
result = []
for num in arr:
if num >= 50 and num % 2 == 0:
result.append(num // 2)
elif num < 50 and num % 2 == 1:
result.append(num * 2)
else:
result.append(num)
return result
수열 변환하는 거 재밌네요!
처음에 % 2 하는 것도 어려웠는데ㅎㅎ
조건에 맞게 수열 변환하기 2
문제 설명
정수 배열 arr가 주어집니다.
arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.
이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다.
이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.
단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
이건 문제가 되게 복잡하네요!
예시를 보면 더 이해가 됩니다.
주어진 배열 arr에 대해 특정 조건에 따라 변환하는 작업을 반복하다가,
변환이 더 이상 일어나지 않는 순간을 찾아야 하는 문제입니다.
def solution(arr):
idx = 0
prev = arr
while True:
change = []
for i in prev:
if i >= 50 and i % 2 == 0: change.append(int(i / 2))
elif i < 50 and i % 2 == 1: change.append(i * 2 + 1)
else: change.append(i)
same = all(a == b for a, b in zip(prev, change))
if same:
break
idx += 1
prev = change
return idx
이렇게 하면 결과가 잘 나옵니다.
꽤 많은 시행착오를... 겪었어요...ㅎㅎ
원래 이 코드를 썼는데
테스트를 통과를 못하더라고요.
def solution(arr):
def transform_element(num):
if num >= 50 and num % 2 == 0:
return num // 2
elif num < 50 and num % 2 == 1:
return num * 2 + 1
return num
def are_arrays_equal(arr1, arr2):
return all(arr1[i] == arr2[i] for i in range(len(arr1)))
x = 0
while True:
new_arr = [transform_element(num) for num in arr]
x += 1
if are_arrays_equal(arr, new_arr):
break
arr = new_arr
return x
이상으로 오늘 해본 코테였습니다!
다들 건강하세요..
'오늘부터 코딩테스트' 카테고리의 다른 글
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.22 |
---|---|
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.20 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.12 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.11 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기 (0) | 2023.10.11 |