본문 바로가기

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

[Algorithm] 배열 조각하기 (w/ Swift & Python)

배열 조각하기
 

프로그래머스

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

programmers.co.kr

 

 

정수 배열 arr와 정수 배열 query가 주어졌고, query 배열을 순회하면서 다음과 같은 작업을 반복하는거야.  𓃟𓃟𓃟

  1. query의 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 포함한 뒷부분을 자르고 남기기.
  2. query의 홀수 인덱스에서는 arr에서 query[i]번 인덱스를 제외한 앞부분을 자르고 남기기.

즉, query 배열의 각 인덱스에서 짝수일 때는 배열의 앞부분을 남기고, 홀수일 때는 배열의 뒷부분을 남긴다고 생각하면 돼.

그럼 이제 Swift와 Python으로 각각 어떻게 풀 수 있는지 설명해볼게. (̂•͈Ꙫ•͈⑅)̂ ୭ 


 

1.  w/  Swift 

  1. 먼저, arr를 result에 복사해. 이 배열은 우리가 수정해 나갈 배열이야.
  2. query 배열을 순회하면서 index와 value를 얻어오고,
  3. index가 짝수일 때는, value번 인덱스까지의 요소를 남겨야 해. Swift의 prefix 메서드를 사용해서 result 배열의 앞부분만 남기면 돼. 예를 들어 value가 4라면, 0부터 4까지의 요소만 남겨.
  4. index가 홀수일 때는, value번 인덱스부터 끝까지의 요소를 남겨야 해. Swift의 suffix 메서드를 사용해서 value번 인덱스 이후의 요소들을 남기면 돼.
  5. 이 과정을 모두 반복하고 나면 result가 최종 결과가 되는거지!
func solution(_ arr: [Int], _ query: [Int]) -> [Int] {
    var result = arr
    
    for (index, value) in query.enumerated() {
        if index % 2 == 0 {
            // 짝수 인덱스에서는 query[i]번 인덱스를 포함한 앞부분만 남기기
            result = Array(result.prefix(value + 1))
        } else {
            // 홀수 인덱스에서는 query[i]번 인덱스를 제외한 뒷부분만 남기기
            result = Array(result.suffix(result.count - value))
        }
    }
    
    return result
}

 

// 예제
let arr = [0, 1, 2, 3, 4, 5, 6, 7]
let query = [4, 2, 6, 1]
print(solution(arr, query)) // 결과: [2, 3, 4]

 

 


 

2.  w/  Python

  1. arr를 result라는 이름의 변수에 복사해. 여기도 마찬가지로 이 배열을 계속 수정해 나가는 거야.
  2. query를 순회하면서 i와 q를 얻어와. i는 query의 인덱스, q는 현재 값이야.
  3. i가 짝수일 때는, result의 앞부분을 남겨야 해. 슬라이싱을 이용해서 result[:q + 1]을 남기면 돼. 이렇게 하면 q번 인덱스까지의 요소를 남겨.
  4. i가 홀수일 때는, result의 뒷부분을 남겨야 해. 슬라이싱을 이용해서 result[q:]로 하면 q번 인덱스부터 끝까지 남겨.
  5. 이렇게 모든 query 요소를 처리하고 나면 최종 결과가 result에 남는거야.  𓃟𓃟
def solution(arr, query):
    result = arr
    
    for i, q in enumerate(query):
        if i % 2 == 0:
            # 짝수 인덱스에서는 query[i]번 인덱스를 포함한 앞부분만 남기기
            result = result[:q + 1]
        else:
            # 홀수 인덱스에서는 query[i]번 인덱스를 제외한 뒷부분만 남기기
            result = result[q:]
    
    return result

 

# 예제
arr = [0, 1, 2, 3, 4, 5, 6, 7]
query = [4, 2, 6, 1]
print(solution(arr, query)) # 결과: [2, 3, 4]