Page 26 -
P. 26
프로그램 4.1.1 세 숫자의 합 문제 (threesum.py)
import stdarray
import stdio
def writeTriples(a):
# [연습문제 4.1.1] 참조
4
def countTriples(a):
n = len(a)
count = 0 알고리즘과 데이터 구조
a[] 정수의 배열
for i in range(n): n a[]의 길이
for j in range(i+1, n):
count 합이 0이 되는 쌍의 개수
for k in range(j+1, n):
if (a[i] + a[j] + a[k]) == 0:
count += 1
return count
def main():
a = stdarray.readInt1D()
count = countTriples(a)
stdio.writeln(count)
if count < 10:
writeTriples(a)
if __name__ == '__main__': main()
이 프로그램은 표준 입력 장치에서 정수 배열을 읽고, 표준 출력 장치에 합이 0이 되는 세 숫자
조합의 개수를 출력한다. 개수가 적으면 세 숫자 조합도 출력한다. 1kints.txt 파일에는 32비트
31
31
정수 난수(-2 에서 2 -1 사이의 정수) 1,000개가 들어 있다. 이 파일에는 합이 0이 되는 세 숫
자 조합이 있을 가능성이 거의 없다([연습문제 4.1.27] 참조).
% more 8ints.txt % python3 threesum.py < 8ints.txt
8 4
30 30 -30 0
-30 30 -20 -10
-20 -30 -10 40
-10 -10 0 10
40 % python3 threesum.py < 1kints.txt
0 0
10
5
479