Algorithm/문제 풀이

[Codility] PassingCars

비번변경 2025. 4. 9. 02:08

문제

문제 : https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/

N개의 정수로 구성된 비어 있지 않은 배열 A가 있다. 배열 A의 연속된 요소는 도로 위의 연속된 자동차를 나타내며, 배열 A에는 0 또는 1로만 구성되어 있다. 이때, 0은 동쪽으로 이동하는 차량을 나타내고 1은 서쪽으로 이동하는 차량을 나타낸다.

목표는 지나가는 차를 세는 것으로, P가 동쪽으로 이동하고 Q가 서쪽으로 이동할 때 0 ≤ P < Q < N인 한 쌍의 차 (P, Q)가 지나간다고 한다.

예로 들어 아래와 같은 배열 A가 있다고 하자.

  A[0] = 0
  A[1] = 1
  A[2] = 0
  A[3] = 1
  A[4] = 1

지나가는 차의 쌍은 (0, 1), (0, 3), (0, 4), (2, 3), (2, 4)이다. 즉, 차의 쌍 (P, Q)에 대한 배열 값이 0, 1인 것을 찾으면 된다.

참고로 지나가는 차량 쌍 수가 1,000,000,000을 초과하면 -1을 반환한다.

 

 

풀이

단순하게 배열을 순회하며 동쪽으로 가는 차량, 즉 값이 0인 개수를 세다가, 서쪽으로 가는 차량인 1을 만나면 0의 수를 결과값에 더하는 방식으로 풀어낼 수 있다.

def solution(A):
    # 반환값
    result = 0
    # 동쪽으로 가는 차의 수
    east = 0
    
    # 배열 순회
    for a in A:
        # 동쪽으로 가는 경우
        if a == 0:
            east += 1
        # 서쪽으로 가는 경우
        elif a == 1:
            # 결과값 갱신
            result += east
        
        # 제한 수 초과 시
        if result > 1000000000:
            return -1
    return result

 

 

참고 문서

https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/

 

 

728x90