본문 바로가기

iOS 앱 개발자 프로젝트/알고리즘 코드카타

[Algorithm] 배열의 길이에 따라 다른 연산하기 (w/ Swift & Python)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

language = swift

 

배열의 길이와 인덱스의 홀짝성(?)에 따라 값을 반환하도록 해야 하는데,

enumerated 함수를 사용하여 배열의 각 요소에 인덱스를 부여하고, ( → offset 사용)

map 함수를 아용하여 각 요소를 조건에 따라 변환하면 된다.

func solution(_ arr: [Int], _ n: Int) -> [Int] {
    return arr.enumerated().map {
        if arr.count % 2 == 1 {
            return ($0.offset % 2 == 0) ? ($0.element + n) : $0.element
        } else {
            return ($0.offset % 2 == 0) ? $0.element : ($0.element + n)
        }
    }
}

 

  • map 함수 : 기존의 데이터를 원하는 형태로 변환하는 데 사용 ( → 배열이나 컬렉션의 각 요소에 대해 특정 작업을 수행하고, 그 결과를 새로운 배열로 반환
  • enumerated 함수 : 컬렉션의 각 요소와 그 요소의 인덱스를 쌍으로 묶어서 반환 ( 이를 통해 요소의 값뿐만 아니라 위치 정보도 함께 활용)
  • offset : swift의 enumerated() 함수를 사용할 때 나타나는 개념으로, 배열의 각 요소를 순회하면서 각 요소와 그 요소의 인덱스를 튜플 형태로 반환한다. 이때. offset은 해당 요소의 인덱스를 나타내며, element는 배열의 요소 자체를 나타낸다. 간단히 말해 offset은 배열 내 요소의 위치(인덱스)를 의미한다. 예를 들어, 배열이 ["사과","바나나","체리"]라면, "사과"의 offset은 0, "바나나"의 offset은 1, "체리"의 offset은 2가 된다. 오늘의 코딩 문제의 경우처럼 짝수 인덱스 (offset % 2 == 0) 요소에만 특정 값을 더할 수도 있다.   

 

 

 

 

language = python

 

배열의 길이가 짝수 len(arr) % 2 == 0 일때

홀수 인덱스 idx % 2 == 1 에

해당 요소에 n을 더한다. arr[idx] += n

def solution(arr, n):
    for idx, val in enumerate(arr):
        if len(arr) % 2 == 0:
            if idx % 2 == 1:
                arr[idx] += n
        else:
            if idx % 2 == 0:
                arr[idx] += n
    
    return arr

 

※ 파이썬에서 소괄호()는 주로 함수를 호출할 때, 대괄호[]는 리스트와 같은 시퀀스 타입의 특정 요소에 접근할 때 사용한다.