[Codility] Lesson 5 PassingCars 파이썬

현지·2025년 12월 17일

코테 준비

목록 보기
6/10

문제풀이

솔직히 문제 이해하는게 너무 어려웠다. 예시로 주어진 예제도 이해를 못 해서 계속 ???상태로 문제만 한 10번 읽었다.

문제를 정리해보자면 가로지르는 차의 수를 구하는게 목표이다. 여기서 passing을 내가 이상하게 해석해서 문제 이해가 안 됐던것...
0은 오른쪽, 1은 왼쪽으로 가는 차이고 차량끼리 서로 교차하게 되는 수를 구한다고 생각하면 된다.
가로지르는 차의 수가 10억개를 넘으면 -1반환하고 수 범위 10만이다.

고민 포인트

역시 시간이 포인트인 문제인듯. 이중포문써서 단순 더하기로 세면 쉽게 풀리겠지만 그러면 무조건 타임아웃 뜰 듯.

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

def solution(A):
    count = 0
    
    for idx, num in enumerate(A):
        if num == 0:
            for num2 in A[idx+1:]:
                if num2 == 1:
                    count += 1

    return count


역시나

트러블 슈팅

핵심은 0이 나온 뒤의 수들 중, 1의 출현수를 구하는 것이다. 그래서 배열의 원소들의 종류가 0과 1뿐인걸 이용해서 sum()을 이용해 전체합(=1의 전체 개수)을 구했다. 그 다음 for문으로 A를 순환하며 현재까지 발견한 1의 수를 카운트해서 전체수에서 빼 주는 방식으로 간단하게 이후에 나오는 1의 수를 계산할 수 있었다.

최종 제출 코드

def solution(A):
    total_num = sum(A) # 배열의 모든 1을 더한 수
    count_1 = 0 # 여태나온 1의 수
    result = 0 # 반환할 결과

    for num in A:
        if num == 0:
            result += (total_num - count_1)
            if result > 1000000000:
                return -1
        else:
            count_1 += 1
            
    return result

profile
헤맨만큼 내 땅이다

0개의 댓글