practivceAlgorithm 570

[SWEA][Python] 4866 괄호검사

stack써서 푸는 문제. stack하나로도 가능한데.. def bracket_inspection(s): dic = {')':0, '}':0,']':0, '(':0, '{':0,'[':0} stack1 = [] stack2 = [] for chr in s: if chr in dic: dic[chr] += 1 stack1.append(chr) if dic[')'] != dic['('] or dic['}'] != dic['{'] or dic[']'] != dic['[']: return 0 while stack1: check = stack1.pop() if check == ')' or check == '}' or check==']': stack2.append(check) else: if check =='(':..

[SWEA][Python] 4864 문자열 비교

KMP연습할 겸 풀었다. 하나만 찾으면 되는 문제 import sys input = sys.stdin.readline def make_pattern(s): counter = 0 for idx in range(1, len(s)): while counter > 0 and s[counter] != s[idx]: counter = lose_funtion[counter-1] if s[counter] == s[idx]: counter += 1 lose_funtion[idx] = counter def KMP_pattern_matching(p, s): counter = 0 p_size = len(p) for idx in range(len(s)): while counter > 0 and p[counter] != s[id..

[알고리즘] 문자열 매칭 3종세트 KMP, 보이어무어, 라빈카프

고지식한 매칭 text = 'ABABCA' for i in range(len(text)-len(target)): for j in range(len(target)): if text[i+j] == target[j]: j+=1 else: break print('Identified') break KMP 알고리즘.(시작위치 후보를 잡아놓자) 불일치가 발생한 텍스트 스트링의 앞 부분에 어떤 문자가 있는지를 미리 알고 있으므로, 불일치가 발생한 앞 부분에 대하여 다시 비교하지 않고 매칭을 수행. 패턴을 전처리하여 배열 next[M]을 구해서 잘못된 시작을 최소화함. next[M]: 불일치가 발생했을 경우 이동할 다음 위치 패턴내에서 반복하는 구간이 있을것이라는 전제.. 하지만 없다면 무의미. 하지만 패턴이 길다는 전..

[SWEA][Python] 1966 숫자를 정렬하자

5가지 정렬 방법. 1. 선택정렬 2. 버블정렬 3. 삽입정렬 4. 퀵정렬 5. 병합정렬 import sys sys.stdin = open('input.txt') # 선택정렬. 앞에서부터 최솟값을 찾아 swap 시킨다. def sort_arr(arr): for i in range(N-1): min_value = float('inf') min_idx = 0 for j in range(i,N): if arr[j] < min_value: min_value = arr[j] min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] return arr for test in range(1, int(input())+1): N = int(input()) init_arr = li..

[SWEA][Python] 1979 어디에 단어가 들어갈 수 있을까?

다 세줬다. 뭔가 개선 가능할 것 같기도 하다.? 근데 모르겠다 import sys sys.stdin = open('input.txt') # 각 행에 몇칸짜리 자리가 있는지 count 해 cells 에 저장합니다. def count_row(n, target, puzzle): sum_seat = 0 for row in range(n): cnt = 0 cells = [] for column in range(n): if puzzle[row][column]: cnt += 1 else: if cnt: cells.append(cnt) cnt = 0 cells.append(cnt) sum_seat += cells.count(target) # 원하는 자리가 있다면 세줍니다. return sum_seat # 글자가 들어..