반응형

자료구조 및 알고리즘 104

주요 라이브러리 ・DFS ・BFS

내장 함수- evalresult = eval("(3+5) * 7") # 56 - sortedresult = sorted([9,1,8,5,4]) # [1,4,5,8,9]result = sorted([9,1,8,5,4], reverse=True) # [9,8,5,4,1]result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key=lambda x: x[1], reverse=True) # [('이순신', 75), ('아무개', 50), ('홍길동', 35)] - .sort(): 내부 값이 바로 변경됨data = [9,1,8,5,4] data.sort() # [1,4,5,8,9]   itertools- permutations(순열): 서로 다른 n개 중에 r개를 선..

[python] 1918. 후위 표기식

문제: https://www.acmicpc.net/problem/1918  풀이 오늘은 stack, queue, deque의 문제 유형인 후위 표기식을 풀어보겠습니다. 연산자 우선순위1. () 2. * /3. + - stack을 이용하여 연산자의 우선순위를 고려하여 문제를 해결해보도록 하겠습니다.  리스트에 식전체를 넣어 for문을 통해 한 문자씩 확인합니다.1. ()를 확인2. * / 인지를 확인하고, 먼저 들어온 같은 우선순위에 있는 * /는 모두 출력 문자열에 추가3. 현재 연산자를 stack에 추가4. + - 인지를 확인하고, + - 보다 낮은 우선순위의 연산자가 없기 때문에 자신보다 우선순위가 높은 연산자들을 모두 출력 문자열에 추가5. )를 발견하면 ( 와 ) 사이에 있는 모든 연산자들을 출력..

Queue・FIFO(First In First Out)

Queue 설명 먼저 들어온 데이터가 먼저 나가는 구조이다.선입선출(FIFO:First In First Out) 구조라고 한다. Stack은 한 쪽이 막혀있어 입구와 출구가 하나라면,Queue는 입구와 출구가 따로있다. Queue는 연결 리스트(linked list)로 구현이 되는데 python에서 queue 구현을 위해 deque() 함수를 제공한다.Import하여 쉽게 사용하면 된다.  List 자료구조가 있는데 왜 굳이 queue를 사용할까 ? Linked list는 제일 앞의 요소를 꺼낼 때 head 노드를 두 번째 노드로 바꾸고 head 노드였던 자료는 queue에서 빠져나온다. 이는 빅오 표기법에 따라 O(1)이라는 매우 빠른 연산이 가능하다. 하지만 array list는 순서대로 배열되어 있..

Stack ・LIFO(Last In First Out)

Stack 설명 Stack은 먼저 들어온 데이터는 제일 늦게 나가게 되고, 맨 마지막에 들어온 자료가 제일 먼저 나가는 자료구조이다.후입선출(LIFO: Last In First Out) 구조라고 한다. Stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있도록 제한된 선형으로 나열된 자료구조이다.  Python에서 stack의 자료구조는 배열 순서에 따른 배열 리스트(array list)와논리 순서에 따른 연결 리스트(linked list) 두 가지로 활용되는데,알고리즘 코딩테스트에서는 주로 배열 리스트(array list) 형식인 list 자료구조로 stack을 사용한다.  Stack 기본 연산Stack의 입출력은 .append() 리스트 제일 뒤에 데이터 입력과.pop() 리스트 제일 뒤에 데이터 출력..

코딩테스트 준비 3편

더보기더보기해당 게시글은 https://covenant.tistory.com/143 을 참고하여 작성했습니다. 이번 챕터는 문제 풀이 중간 중간에 들어가는 꼭 ! 기억해야 풀이 시간이 줄어드는 순열, 조합, 빈도계산, 덱, 우선순위 큐에 대해 알아보겠습니다.  1. 순열, 조합1-1. 순수한 방법for문 2개를 사용해서 nC2를 구하는 방법은 다음과 같습니다.for i in range(0, N-1): for j in range(i+1, N): print(i, j) 백준 9613번 GCD 합 문제를 풀 수 있습니다. GCD는 다음 챕터에서 살펴볼 것입니다.그렇다면 nC3은? nC4는...? for문을 사용해서는 한계가 있습니다. 1-2. itertools을 사용한 조합from iter..

코딩테스트 준비 2편

더보기더보기해당 글은 https://covenant.tistory.com/142 를 참고하여 작성하였습니다.  1. 정수1-1. 최대, 최소ans = ???for num in arr: if ans > num: ans = numprint(ans) 배열 arr에 있는 값을 for문으로 순회하고 있습니다. 마지막에 출력되는 ans에 arr에 저장되어 있는 값 중 최솟값이 저장되게 하고 싶습니다. 그렇다면 첫번째 줄 ans에 무엇을 저장해야 할까요 ? arr에 있는 최댓값보다 큰 수가 저장되면 됩니다.ans = 999999 ans에 임의로 큰 값을 쓰는 방법도 있습니다. 보통은 문제에서 주어지는 입력 범위 값보다 큰 값을 설정합니다. 예를 들어 arr에는 100,000을 넘지 않는 값이 저장된..

코딩테스트 준비 1편

더보기더보기해당 글은 https://covenant.tistory.com/141 를 참고하여 작성하였음을 알려드립니다. 코딩테스트는 객체 지향적으로 코드를 짤 필요도 없고, 직접 자료구조를 구현할 필요도 없습니다. 주어진 시간 내 간결함과 정확함이 생명입니다. 파이썬으로 코딩테스트를 준비하시는 분들에게 도움이 될만한 자료들을 공유합니다. 1. 다양한 입력코딩테스트에서 기본은 주어진 테스트 케이스를 입력 받는 것입니다.  1-1. 나누어 입력받기다음 입력값이 주어졌을 때 각각 변수에 값을 입력받는 법을 보겠습니다. 1 2 a, b = map(int, input().split()) C, JAVA의 경우 데이터 타입(int, long long ...)에 따라서 저장할 수 있는 최대 정수의 범위가 결정되지만 파..

[python] 6550. 부분 문자열 ・ try-except 문

문제: https://www.acmicpc.net/problem/6550 풀이오늘 문제는 문자열을 다루는 문제입니다.부분 문자열이 포함되어있는지 확인하는 문제입니다. t와 s가 같을 때 idx를 하나씩 올려주면서, s 문자열이 t안에 완벽하게 있는지 확인합니다. while True: try: # 실행할 코드 s, t = map(str, input().split()) idx = 0 flag = 0 for i in range(len(t)): # subsequence if t[i] == s[idx]: # sequence idx += 1 if idx == len(s): ..

[python] 1912. 연속합

문제: https://www.acmicpc.net/problem/1912  풀이이번 문제는 연속 합의 최댓값을 구하는 문제입니다. 선택을 하냐, 하지 않느냐에 따라 dp[i]가 채워집니다. 어려운 문제는 아니였기 때문에 점화식을 구해서 풀 수 있었습니다.이전 값(dp[i-1])에 이번 값(arr[i])를 더한 값을 0과 비교해서, 최댓값을 dp[i]에 채우도록 풀었습니다.   n = int(input())arr = [0] + list(map(int, input().split()))dp = [0] * (n+1)if max(arr[1:])

[python] 2579. 계단 오르기

문제: https://www.acmicpc.net/problem/2579 풀이오늘 문제는 경우의 수를 나누어 풀어야 하는 문제로, 점화식을 찾는데 어려움이 있었습니다.i를 점수 계산으로, j를 0/1/2번 연속 밟을 때로 간주하여 문제를 해결했습니다. 따라서, dp[i][j]는 i번 계단을 j번 연속 밟았을 때의 최대점수를 의미합니다. 그림을 보면서 설명드리겠습니다. dp[0]일 때, j = 0, 1, 2는 초기값 0입니다.  dp[1]일 때, j = 0은 계단을 밟지 않은 경우로 초기값 0입니다. dp[1]일 때, j = 1은 계단을 1번 밟은 경우로 10 입니다.dp[1]일 때, j = 2는 계단을 연속 2번 밟은 경우이지만 첫번째 계단이기 때문에 2번 밟을 수 없고, 10 입니다.  dp[2]일 때..

728x90
반응형