본문 바로가기

python67

파이썬 bitnami wampstack로 CGI 연결하기 파이썬이 컴퓨터에 깔려있다고 가정하고 진행하겠다. 1. bitnami wamp stack 사이트에서 본인 운영체제에 맞는 것을 골라 설치해준다. (나는 8.0.3-2 버전을 설치하였고, 로컬 C에 설치했다) 2. bitnami가 설치되어있는 경로에 들어가서 몇가지 설정을 해준다. 2-1. C:\Bitnami\wampstack-8.0.3-2\apache2\conf 로 이동해준 뒤, httpd.conf 파일을 수정해줄 것이다. 먼저 혹시모르니까 httpd.conf.bak이라는 이름으로 복제본을 만들어둔다. 원본파일인 httpd.conf 파일에 들어가서 mod_cgi 를 검색으로 찾아준 뒤 LoadModule cgi_module modules/mod_cgi.so 이 주석처리가 안되어 있는지 확인해준다. 2-2.. 2023. 1. 12.
영화감독 숌 - 1436번 처음에 만들어지는 수들 간에 규칙을 찾으려고 시간을 쏟았지만 마땅한 규칙을 찾진 못하였다. 그래서 666부터 1씩 더해가며 수에 '666'이 있는지 검사하는 방식을 사용했다. n = int(input()) no = 0 cnt = 665 while no 2022. 10. 5.
적록색약 - 10026번 bfs로 문제를 해결하였다. graph를 2개, bfs함수를 3개를 만들어서 사용했다. 한 for 루프 안에서, 정상인의 결과를 구하고, 적록색약인 사람의 결과를 따로 구해줬다. import sys from collections import deque t = int(input()) graph = [[0] * 101 for _ in range(101)] special_graph = [[0] * 101 for _ in range(101)] d = [[1, 0], [-1, 0], [0, 1], [0, -1]] for y in range(t): inn = sys.stdin.readline() for x in range(t): graph[y][x] = inn[x] special_graph[y][x] = inn[x.. 2022. 10. 4.
유기농 배추 - 1012번 BFS로 해결하였다. x, y로 나타낼 수 있는 문제의 어려웠던 점은 2중 배열로 표현을 하거나, 인덱스로 접근할 때, y와 x의 위치를 바꿔서 사용해줘야 한다는 점이다. 가로 5칸, 세로 3칸을 x = 5, y = 3이라 할 수 있다. 이것을 우리가 익숙한 좌표평면행태로 보고 싶다면 arr[5][3] 이 아니라 arr[3][5]모양으로 만들어줘야한다. (파이썬에서는 이런방식으로 array를 표현하지 않지만 편의상 이렇게 적었다.) arr[3][5]를 파이썬 식으로 표현하면 arr [ [ 0 ] * 5 for _ in range(3) ] 이고, arr = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 로 보인다. 만약 이 배열에서 x = 2, y = 1 에 .. 2022. 10. 4.
N과 M (2) - 15650 번 백트래킹 함수에서 바로 출력하지 않고 미리 배열에 담아둔 다음 중복되는 것을 빼고 출력해주는 과정을 마지막에 넣어줬다. n, m = map(int,input().split()) arr = [0] * 10 visited = [False] * 10 ans = [] def bt(idx): if idx == m: p = arr[:m] p.sort() ans.append(p) return for i in range(1, n+1): if not visited[i]: arr[idx] = i visited[i] = True bt(idx+1) visited[i] = False bt(0) result = [] for i in ans: if i not in result: for j in i: print(j,end=' ') .. 2022. 10. 3.
N과 M (1) - 15649 번 백트래킹 알고리즘의 기본문제이다. 재귀적으로 돌아가는 dfs 이며, 탐색이 끝나면 바로 전 단계로 돌아가는 형식을 취한다. n,m = map(int,input().split()) # 입력값들의 최대값이 8이므로 넉넉히 10칸으로 만들어줌 arr = [0]*10 is_used = [False]*10 # backtracking funtion def bt(idx): if idx == m: for i in range(m): print(arr[i],end=' ') print() return for i in range(1,n+1): if not is_used[i]: arr[idx] = i is_used[i] = True print('다음 bt', idx + 1) print(arr) print(is_used) bt(.. 2022. 10. 2.
이항 계수 1 - 11050번 combination 계산 방식을 구현해주었다. a, b = map(int, input().split()) s = 1 for i in range(1,b+1): s *= a s /= i a-=1 print(int(s)) 2022. 10. 1.
분해합 - 2231번 이론상 가능한 작은 최소 생성자부터 시작해서 1씩 증가시키면서 탐색하는 방식으로 문제를 해결했다. 특정 값들에서 오류가 발생하여 여러 반례를 찾아가면서 코드를 마무리 지었다. 반례 2 -> 1, 1 -> 0, 1000000 -> 0 ... n = int(input()) # 만약 n 이 3자리수라면 9 + 9 + 9 = 27 , # 9*3 보다 작은 수가 최소 생성자의 한계이다. # n 이 k자리수의 수면 k - 9*k 부터 1씩 증가시키면서 탐색 k = len(str(n)) # print(k, n - 9 * k) def ten_sum(n): # print(n) a = str(n) aa = 0 for i in a: aa += int(i) return aa + n if n - 9 * k > 0: for i .. 2022. 9. 30.
팰린드롬수 - 1259번 입력받을 수를 문자로 입력받아 뒤집어서 같은지 확인해준다. 문자열[::-1]을 하면 뒤에서부터 문자열 슬라이싱이 들어가 뒤집은 것과 같다. while True: n = input() if n == '0': break elif n == n[::-1]: print('yes') else: print('no') 2022. 9. 30.
RGB거리 2 - 17404번 RGB거리 - 1149번 위 문제와 비슷하지만 가장 마지막 집의 색이 가정 첫번째 집과는 달라야하는 다른점이 있다. 가장 첫번째 집이 선택됬는지 확인하면서 코드를 짤 필요가 있다. 각 색이 선택되었을 때 N번째 집까지 코드를 돌린 후, 선택한 색의 집을 뺀 나머지 두 집의 최소값을 저장한다. 그렇게 색 3가지를 모두돌린 후 각 색을 선택했을 때 나온 최소값 3개를 비교하여 가장 작은 수를 출력한다. 색을 선택하는 것을 코드화 할 때, 선택한 색을 제외한 나머지 색들은 1번 집에서 1001의 비용이 든다고 가정하면 무조건 선택이 되지 않을 것이다. N번째 집까지 코드가 돌아가면 선택한 색을 빼고 나머지 2개의 색만 비교하면 된다. 처음에 입력받은 house를 복사하는 과정에서 얕은 복사를 사용하여 예제가 .. 2022. 9. 29.
RGB거리 - 1149번 다이나믹프로그래밍으로 문제를 풀면 된다. 각 단계별로 전체 색에대한 최소값을 구하려다 실패하였다. 각 단계별로, 각 색에대해 최소값을 구한 뒤, 마지막에 최소값을 구해주면 문제를 해결할 수 있다. 예제 3 26 40 83 49 60 57 13 89 99 -> 26 40 83 89 86 83 96 172 185 최소값 : 96 import sys n = int(sys.stdin.readline()) house = [[] for i in range(n+1)] for i in range(n): house[i+1] = list(map(int, sys.stdin.readline().split())) cost = house.copy() for i in range(2,n+1): cost[i][0] += min(cos.. 2022. 9. 29.
바이러스 - 2606번 DFS 깊이우선탐색으로 문제를 해결하였다. 방문했던곳은 True로 표시를 하면서 진행하기 때문에 DFS가 끝나고 나면 True가 몇개인지 세주면 된다. import sys l = int(sys.stdin.readline()) c = int(sys.stdin.readline()) graph = [[] for i in range(l+1)] check = [False] * (l+1) # print(graph) for _ in range(c): a,b = map(int,sys.stdin.readline().split()) graph[a].append(b) graph[b].append(a) for i in graph: i.sort() def DFS(start): check[start] = True for i in.. 2022. 9. 28.