코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 1 삼총사

_알파카 2024. 8. 20. 15:53
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/131705

 

프로그래머스

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

programmers.co.kr

 

내 풀이

주어진 배열에서 3개의 합이 0이 되는 조합의 개수를 뽑는 문제이다.

def solution(number):
    answer = 0
    for i in range(len(number)):
        for j in range(i+1, len(number)):
            for k in range(j+1, len(number)):
                if number[i] + number[j] + number[k] == 0:
                    answer += 1
    return answer

 

3개의 중첩 반복문을 사용하여 중복되지 않는 3가지 요소를 골랐다. 

 

반복문을 많이 쓰기 때문에 시간복잡도가 O(n^3)인데, 

이 때문에 시간초과가 나지 않을까? 생각했지만, 다행히도 주어진 배열의 길이가

-1000 <= number의 원소 <= 1000

이기 때문에 시간초과는 나지 않은 것 같다! 

 

 

다른 사람 풀이

말 그대로 조합을 뽑는 문제이기 때문에 

파이썬의 조합 라이브러리를 쓴 풀이도 있다. 

itertools의 combination을 사용하면 원하는 원소 3개를 뽑을 수 있기 때문이다.

def solution (number) :
    from itertools import combinations
    cnt = 0
    for i in combinations(number,3) :
        if sum(i) == 0 :
            cnt += 1
    return cnt

 

끄읏-!

 

728x90