• 사전순으로 다음에 오는 순열과 이전에 오는 순열을 찾는 방법Ai-1 < Ai를 만족하는 가장 큰 i를 찾는다j >= i이면서 Aj > Ai-1를 만족하는 가장 큰 j를 찾는다Ai-1과 Aj를 swap한다Ai부터 순열을 뒤집는다(1) Ai-1 < Ai를 만
1. 비트마스크 비트(bit)연산을 사용해 부분집합을 표현할 수 있는 방법이다. 두 수 A와 B를 비트 연산하는 경우에는 가장 뒤의 자리부터 하나씩 연산을 수행하면 된다. (1) 기본 연산 A = 37, B = 83 A = 11011(2), B = 1010011(2
다이나믹 프로그래밍은 큰 문제를 작은 문제로 나눠서 푸는 알고리즘을 의미한다.Dynamic은 아무 의미가 없는 용어이고 이 용어를 1940년에 처음 사용한 Richard Bellman은 그냥 Dynamic이란 용어가 멋있어서 사용했다고 한다. 문제가 두 가지 속성을
• 한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 자료구조• 먼저 넣은 것이 가장 먼저 나오기 때문에 First In Frist Out (FIFO) 라고도 한다.• python의 경우 queue 구현시 collections.deque를 사용하는 것이 좋다.
• 브루트 포스(Brute Force)는 모든 경우의 수를 다 해보는 기법이다.예를 들어, 비밀번호가 4자리이고, 숫자로만 이루어져 있다면 0000부터 9999까지 다 입력해보면 된다. 경우의 수가 10000가지 이므로 이는 컴퓨터에서 충분히 빠른 처리가 가능한 연산이
리스트에서 리스트 원소 더할 때랑문자열에서 문자열 원소 더할 때랑 다름리스트 + 리스트문자열 + 문자열
• 큐를 이용해서 지금 위치에서 갈 수 있는 것을 모두 큐에 넣는 방식• DFS와 마찬가지로 체크 배열을 만들어 큐에 넣을 때 방문했다고 체크해야 한다. 현재 정점 : 1순서 : 1큐 : 1 현재 정점 : 1순서 : 1 2 5 큐 : 1 2 5 현재 정점 : 2순
• 스택을 이용해서 갈 수 있는 만큼 최대한 많이 가고 갈 수 없으면 이전 정점으로 돌아간다.• 한번 방문한 경로는 check배열을 만들어 방문했다고 체크를 해야 한다.현재 정점 : 1순서 : 1스택 : 1 현재 정점 : 2순서 : 1 2스택 : 1 2 현재
기존의 집합과 다르게 중복된 원소를 허용하는 집합을 다중집합이라고 한다.중복집합이라고도 불리며, 통상적인 집합은 각 원소의 중복도가 1인 중복집합으로 여길 수 있다.a = 1,2,2,3,4,5b = 1,1,2,3,4,6일반 집합의 합집합: 1,2,3,4,5,6일반 집합
에라토스테네스의 체는 코딩테스트에서 소수를 구할 때 시간을 많이 줄일 수 있는 대표적인 소수 판별 알고리즘이다.소수란 양의 약수를 두 개만 가지는 자연수를 의미하며 이러한 소수를 빠르고 정확하게 구하는 방법이 에라토스테네스의 체이다.1) 2부터 시작해 제곱을 찾은 후
python에서는 함수가 return으로 종료하지 않더라도자동으로 return none을 해준다.def check(n): if n==1: print("프린트 yes") return("리턴 yes")check(1) print(check(1)
파라메트릭 서치란 이분탐색에서 파생된 탐색 알고리즘이다.따라서 두 방법은 상당히 유사하지만 문제의 틀만 맞다면 파라매트릭 서치가 훨씬 강력한 도구로 쓰일 수 있다.파라메트릭 서치는 쉽게 말해 최적화 문제를 결정 문제로 바
def check(n): if n==1: return False else: check(n-1) return Trueprint(check(1)) print(check(4)) \`\`\`return으로 재귀를 실행하지 않고
그리디란 당장 좋은 것만 선택하는 알고리즘으로 강력한 문제 해결 방법이다.그리디는 국내에서 단어 그대로 번역하여 '탐욕법'으로 소개되는데 이름에서 알 수 있듯이 어떠한 문제가 있을 때, 단순 무식하게 탐욕적으로 문제를 푸는 알고리즘이다. 쉽게 말해 미래는 생각 안하고
분할 정복이란 크고 방대한 문제를 조금씩 나눠가면서 쉽게 풀 수 있는 문제 단위로 나눈 다음 그것들을 다시 합쳐서 문제를 해결하는 방법이다.분할 정복은 세 단계로 설계할 수 있다.기존 문제를 작은 문제로 나누는 Divide단계나누어진 각 부분 문제를 해결(정복)하는 C
파이썬에는 객체의 종류가 두가지가 있다.mutable : 변경 가능한 객체immutable : 변경 불가능한 객체mutable 객체로는 set, list, dictionary가 있고 immutable 객체로는 int, float, tuple, str, bool이 있다.
복사에는 깊은 복사와 얕은 복사라는 개념이 있다.얕은 복사라는 것은 변수를 복사했지만 실제로는 복사가 아니라 연결되있는 것을 의미한다.깊은 복사는 우리가 흔히 알고있는 복사의 개념이다. 얕은 복사를 하면 복사를 했다고 생각하지만 사실 복사한 것은 참조(메모리 주소)
비순환 방향 그래프 (Directed Acyclic Graph) DAG라고 부르는 비순환 방향 그래프는 사이클이 없는 방향 그래프이다. DAG은 주로 이벤트간의 우선순위를 나타낼 때 사용한다. 사이클이 있으면 DAG이 아니므로 주의해야 한다.
https://www.acmicpc.net/problem/2159원래 백준 풀이는 안적는데 검색해도 파이썬 풀이가 없길래(틀린 풀이만 있음) 적는다. dp를 이용했고 네 점과 네 점을 계속해서 비교하여 최소값을 갱신하는 식으로 풀었다. 주의할 점은 행과 열을