Loading...
2022. 9. 26. 02:56

재귀함수를 이용한 순열 구현하기

1. 다중 for문을 이용해 단순히 순열을 생성하기 [1,2,3,4]의 모든 순열을 출력하라하면 어떻게 해야할까? 1부터 4까지 i,j,k,w를 잡고, i가 1부터 4중 하나를 선택하고, j는 i에서 고르지 않은 1부터 4중에 하나 고르고 k는 i,j에서 고르지 않은 1부터 4중 하나를 고르고 w는 i,j,k에서 고르지 않은 나머지 하나를 고르고 for i in range(1,5): for j in range(1,5): if i != j: for k in range(1,5): if k != i and k != j: for w in range(1,5): if w != i and w != j and w != k: print(i,j,k,w) 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 ..

2022. 8. 25. 03:17

2차원 배열에서 한 행, 한 열 당 숫자 하나씩을 골랐을 때 최소 합으로 만드는 방법

1. 문제 N*N 배열에 숫자가 들어있는데, 각 행에서 하나씩 숫자를 골라 그들의 합이 최소가 되도록 만들고 싶다. 그런데 세로로 같은 줄에 2개 이상의 숫자를 고를 수는 없다. 어떻게하면 합이 최소가 되도록 숫자를 고를 수 있을까? 2. 나의 풀이 어떻게 풀어야할지 도저히 모르겠더라 그래서 천천히 pseudo code를 생각해보았다 2-1)한 행에 0부터 n-1까지에서 숫자를 하나 고른다 2-2)고른 숫자를 더해준다 2-3)행수에 1을 더해서 다음 행으로 이동한다 2-4)이전 행에 고른 열이 아닌 다른 열에서 숫자 하나를 고른다 2-5)고른 숫자를 재귀적으로 반복함 이런식으로 생각해보고 하나하나 천천히 짜보니까 길이 좀 보이긴 하더라 def pick_num(x,y,sum_value): sum_value..

2022. 8. 16. 03:09

문자열 패턴 매칭 brute force 알고리즘

1. brute force 패턴 매칭 알고리즘 원본 문자열 s에 대하여 특정 문자열 패턴 p가 몇번이나 존재하는지 찾고자 하는 알고리즘 모든 경우의 수를 검사하여 몇번이나 패턴이 존재하는지 검사한다 이때 패턴과 해당 길이의 부분 문자열을 전부 비교하는게 아니라 한글자 한글자씩을 비교함 예를 들어 s = abcdefghi p = cdf 라고 한다면 abcdefghi cdf 부터 비교를 시작.. abc와 cdf를 한번에 비교하는게 아니라 a와 c를 비교하여 a와 c가 다르므로 cdf를 한칸 뒤로 민다 내 생각에 abc와 cdf를 한번에 비교하는 시간보다 a와 c를 비교하고 한칸 뒤로 미는게 효과적이라 그런가?? 아닌데..? 일단 한글자씩 비교한다고 배웠으니까 그렇게 알아놓자고 아무튼 abcdefghi cdf..