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)
이렇게 쉽게 풀 수 있었는데 ㅠ