Algorithm

[Programmers/파이썬] 프로그래머스(Lv.1) 삼총사 문제풀이

토산인 2024. 8. 22. 17:46

문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

사고 흐름

1. number의 최대 길이가 13, 모든 합의 개수를 알아야한다 -> 완전탐색

2. 완전 탐색 방법

2-1. combinations 으로 풀기

2-2. 3포인터로 하나씩 다 가면서 확인하기 -> 선택!

 

문제 핵심과 알고리즘

완전 탐색 + 3포인터

 

def solution(number):
    answer = 0
    number.sort()
    
    for i in range(len(number)-2) :
        left, right = i+1, len(number)-1
        
        while right>=i+2 :
            s = number[i]+number[right]
            while left<right :
                if s+number[left]==0 :
                    answer+=1
                left+=1
            right-=1
            left = i+1
        
    return answer

 

i, left, right 이 왼쪽에서 오른쪽 순서의 포인터이다. i는 하나씩 늘리고, right는 항상 맨끝에서 시작하고, left는 하나씩 증가면서 총합을 확인한다. 

 

문제 풀면서 헤맸던 부분

딱히 없었다. 

 

총평 

(소요시간: 30) 중간에 포인터 범위때문에 시간이 좀 걸렸다. 그냥 처음 생각했던 조합 방법으로 갈걸 그랬다. 

from itertools import combinations

def solution(number) :
    return list(map(sum, combinations(number, 3))).count(0)

 

이렇게 쉽게 풀 수 있었는데 ㅠ