NIRVANA
[level 1] 삼총사 본문
문제
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
문제 풀이 접근법1
1) 배열의 길이 만큼 반복문을 진행 -> 2중 반복문을 사용
2) i와 j를 비교하여 둘이 같지 않다면 sum에 number[j]를 더한 후, count에 1을 더함
3) 만약 sum == 0이고 count == 3이면 answer에 +1을 함
4) 아니라면 j 반복문을 돌기 전 sum을 0으로 초기화
sum = 0
count = 0
answer = 0
for i in range(len(number)):
sum = 0
for j in range(len(number)):
if i != j:
sum += number[j]
count +=1
if sum == 0 and count == 3:
answer +=1
#print(answer)
였는데...^~^ 지금 answer가 주석 처리 되어 있는 걸 보면 알 수 있듯이
문제가 있다. sum이 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)):
sum = number[i]+number[j]+number[k]
if sum == 0:
answer+=1
return answer
배열에 있는 3개의 수를 더했을 때 0이 되는 수를 찾는 것이므로
당연히 for문을 세 번 하면 경우의 수를 찾을 수 있을텐데!!
이걸 왜 생각 못했을까....
다른 분들 풀이
def solution (number) :
from itertools import combinations
cnt = 0
for i in combinations(number,3) :
if sum(i) == 0 :
cnt += 1
return cnt
와 파이썬에 조합 라이브러리도 있구만
number에서 3개를 뽑은 순서쌍의 리스트가 생성되고, 해당 값들을 더했을 때 0이되면 count+1을 하면 된다.
좋은 라이브러리인 것 같다!
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 1] 시저 암호 (mod로 다시 생각해보기) (0) | 2023.07.24 |
---|---|
[level 1] 최소직사각형(다시!) (0) | 2023.07.24 |
[level 1] 예산 (0) | 2023.07.18 |
[level 1] 이상한 문자 만들기 (0) | 2023.07.18 |
[level 1] 3진법 뒤집기 (0) | 2023.07.18 |