# matrix 90 회적
def rotate_a_matrix_by_90_degress(a):
r_length = len(a)
c_length = len(a[0])
# matrix replica set
res = [[0] * r_length for _ in range(c_length)]
for r in range(r_length):
for c in range(c_length):
print("r,c:", r, ",", c)
res[c][r_length-1-r] = a[r][c]
print(res)
return res
matrix= [[1,2,3], [4,5,6],[7,8,9]]
print(rotate_a_matrix_by_90_degress(matrix));
r,c: 0 , 0
r,c: 0 , 1
r,c: 0 , 2
r,c: 1 , 0
r,c: 1 , 1
r,c: 1 , 2
r,c: 2 , 0
r,c: 2 , 1
r,c: 2 , 2
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997
# 투 포인터
# 특정한 합을 가지는 부분 연속 수열찾기 문제에 유용하다.
# 투 포인터는 음수 데이터가 포함되어 있는 경우 해결할 수 없다.
n = 5 # 데이터의 개수
m = 5 # 찾고자 하는 부분합
data = [1,2,3,2,5]
count = 0
interval_sum = 0
end = 0
# start를 차례대로 증가시키며 반복
for start in range(n): # 0~5까지 수행
# end를 가능한 만큼 이동시키기
while interval_sum < m and end < n:
interval_sum += data[end]
print("a:",data[end])
print("interval_sum:",interval_sum)
end += 1
# 부분합이 m일 때 카운트 증가
if interval_sum == m:
count += 1
interval_sum -= data[start]
print()
print("답:",count)
a: 1
interval_sum: 1
a: 2
interval_sum: 3
a: 3
interval_sum: 6
a: 2
interval_sum: 5
a: 5
interval_sum: 7
답: 3
# 투 포인트 - 두 리스트의 합집합
# 사전에 정렬된 리스트 A와 B 선언
n, m = 3, 4
a = [1, 3, 5]
b = [2, 4, 6, 8]
# 리스트 A와 B의 모든 원소를 담을 수 있는 크기의 결과 리스트 초기화
result = [0] * (n + m)
i = 0
j = 0
k = 0
# 모든 원소가 결과 리스트에 담길 때까지 반복
while i < n or j < m:
# 리스트 B의 모든 원소가 처리되었거나, 리스트 A의 원소가 더 작을 때
if j >= m or (i < n and a[i] <= b[j]):
# 리스트 A의 원소를 결과 리스트로 옮기기
result[k] = a[i]
print("a:",result)
i += 1
# 리스트 A의 모든 원소가 처리되었거나, 리스트 B의 원소가 더 작을 때
else:
# 리스트 B의 원소를 결과 리스트로 옮기기
result[k] = b[j]
print("b:",result)
j += 1
k += 1
# 결과 리스트 출력
for i in result:
print(i, end=' ')
a: [1, 0, 0, 0, 0, 0, 0]
b: [1, 2, 0, 0, 0, 0, 0]
a: [1, 2, 3, 0, 0, 0, 0]
b: [1, 2, 3, 4, 0, 0, 0]
a: [1, 2, 3, 4, 5, 0, 0]
b: [1, 2, 3, 4, 5, 6, 0]
b: [1, 2, 3, 4, 5, 6, 8]
1 2 3 4 5 6 8
[0, 10, 30, 60, 100, 150]
70
# 순열과 조합, 경우의 수 구하는 방법
import itertools
data = [1, 2, 3]
# 순열
print("순열:")
for x in itertools.permutations(data, 2):
print(list(x), end=' ')
print()
print('------------')
# 조합
print("조합:")
for x in itertools.combinations(data, 2):
print(list(x), end=' ')
순열:
[1, 2] [1, 3] [2, 1] [2, 3] [3, 1] [3, 2]
------------
조합:
[1, 2] [1, 3] [2, 3]
댓글남기기