level0_배열의 길이에 따라 다른 연산하기

2024. 11. 26. 21:16파이썬_알고리즘(코딩테스트)/level0

 

내가 제출한 코드

def solution(arr, n):
    if len(arr) % 2 == 1:
        arr = [x+ n if i % 2 == 0 else x for i,x  in enumerate(arr)]
    else:
        arr=[x+ n if i % 2 == 1 else x for i,x  in enumerate(arr)]
    return arr
  • if len(arr) % 2 == 1
    • 만약에 arr의 길이가 홀수라면
  • arr = [x+ n if i % 2 == 0 else x for i,x  in enumerate(arr)]
    • enumerate(arr)는 arr 배열의 요소( x)와 해당 요소의 인덱스(i)를 동시에 제공한다.
    • if i % 2 == 0
      •  arr배열 요소의 인덱스가 짝수라면
    • x+n
      • arr배열의 요소에 n을 더한다.
    • else x
      • arr배열 요소의 인덱스가 홀수라면 x

else문도 위와 동일하다.

 

다른 사람이 제출한 코드1

내가 한줄...코드를 보았다...

def solution(arr, n):
	return [x + n*((len(arr)+i) % 2) for i,x in enumerate(arr)]

감탄....

만만세..

  • x + n *((len(arr)+i)%2)
    • arr의 리스트의 길이와 인덱스를 더한 값을 2로 나눈 나머지 
    •  0 또는 1의 값을 가진다.

 

다른 사람이 제출한 코드2

사실... 나도 range 범위를 쓰려고 했는데.. 머리는 아는데 손이 움직여지지 않았던 코드였다.

def solution(arr, n):
    N=len(arr)
    if N % 2 : # 홀수라면(TRUE는 1)
    	for i in range(0,N,2):
        	arr[i] += n # 난.. 여기서 막혀버렸다..
    else:
    	for i in range(1,N,2):
        	arr[i] += n
    return arr