brute: 무식한, force: 힘 → 무식한 힘. 완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져옴. 컴퓨터의 빠른 계산 능력 이용 (컴퓨터의 장점을 가장 잘 이용함) 알고리즘 설계의 가장 기본적인 접근 방법은
문제 → 영수와 민혁의 대답과 질문은 우리가 알고 있는상태 따라서 컴퓨터는 영수가 생각하고 있을 상황의 수만 맞추면 됨 결국엔 컴퓨터는 우리가 낸 숫자를 맞추고, 지금 현재 몇개로 생각이 정리 되었는지에 대해 출력하는 문제인듯 ** 1 리스트를 하나두어서 민혁이가 말
1 스택을 사용하는 방법'(' 만 스택에 넣는 방법으로 구현스택의 성질을 이용하여 스택에서 빠져나온 '('와 입력 받은 문자열 중 가장 왼쪽에 위치하는 ')'이 짝일 것으로 간주를 함.모든 연산이 끝난 후 스택이 비어있지 않거나, 문자열의 ')'개수가 남아있을 경우 그
문제 → 큐를 이용하여 프린터의 우선 순위를 이용하여 원하는 문서의 프린터 되는 순서를 구하는 문제 ** 1 큐를 이용하는 방법 문서의 개수와 원하는 문서의 현재 입력 위치, 우선 순위 리스트를 받는다. queue.PriorityQueue()를 이용하여 우선 순위가
스택 마지막에 들어온 것이 먼저 나가는 LIFO(Last In First Out) 구조를 가진 자료 구조
주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 각각의 작은 문제들을 해결하여 정복(Conquer) 하는 방법이다. 문제에 대한 답을 재귀 호출을 이용하여 계산하고 각 부분 문제의 답으로 부터 전체 문제의 답을 계산해 낸다. 일반 적인 재귀 호출과 다른 점은 문제를
💯 문제 → N은 2, 4, 8, 16, 32, 64, 128 중 하나이며, 정사각형으로 이루어 져있고 그 정사각형 안의 숫자가 모두 같은 숫자로 이루어져 있으면 하나의 묶음이 완성되는 문제인듯 ! 전체 종이가 모두 같은 색으로 칠해져 있지 않으면 계속해서 크기를 나
💯 문제 → 앞에서 풀었던 색종이 만들기와 거의 비슷한 문제 ! 하지만 이번에는 총 9개로 나눈다 아마 이 문제도 분할정복을 사용하면 될 듯 🎈 1 분할정복을 사용하는 방법 일단 들어온 입력을 모두 리스트에 저장을 하는 한 후, 그 리스트를 나누기 시작 나누는
💯 문제 → 최대 힙을 이용하는 문제인데, 만약 들어온 수가 0인 경우에는 정렬된 최대힙의 루트를 삭제하고 그 값을 출력하는 문제인듯 ! 🎈 1 최대힙 사용하는 방법 파이썬에는 최대 힙이 없어 최소힙을 응용하여 사용함 만약 들어온 수가 0일경우에는 삭제를 하고
🎈 1 최소힙 사용하는 방법파이썬에서 제공하는 최소힙을 사용함최소힙을 정렬하는 기준은 절대값을 이용함만약 들어온 수가 0일경우에는 삭제를 하고 만약 절대값이 작은 것이 여러개 일 경우 더 작은 값을 삭제하고 출력함<😍 첫번째 코드>입력을 들어온 대로 배열로 받
✅ Greedy Algorithms(탐욕법, 탐욕 알고리즘) 문제를 해결하는 과정에서 그 순간순간마다 최적이라고 생각되는 결정을 하는 방식으로 진행하여 최종 해답에 도달하는 문제 해결 방식 동적 프로그래밍 사용 시 지나치게 많은 일을 한다는 것에서 착안하여 고안된
💯 N * N 행렬을 입력받은 수 만큼 제곱을 시키고 10000으로 나눈 수의 나머지를 행렬로 출력하는 문제인듯 🎈 1 분할 정복을 사용하는 방법 거듭 제곱의 성질을 이용하여 문제를 푸는 방법 > 출처 https://mygumi.tistory.com/319
✅ Dynamic Programming(동적 계획법) 큰 의미에서 분할 정복과 같은 접근 방식을 의미함 분할 정복과는 나누는 방식에서 차이점이 생기는데 동적 계획법 같은 경우에는 한 번만 계산하고 그 결과를 다른 문제에도 계속해서 계산 결과를 재활용하여 적용함 두
🎈 1 동적계획법을 사용하는 방법1, 2, 3만을 이용하는 문제여서 일단 먼저 1, 2, 3에 대한 경우의 수를 cache 배열에 저장n의 이전의 숫자들을 이용해야함ex) 5 = 1 + 45 = 2 + 35 = 3 + 2 일 경우, 4의 경우의 수를 이용하면 7 +
🎈 1 동적계획법, 그리디를 사용하는 방법일단 먼저 3과 5으로 나누어 지지 않는 N일 경우 -1을 출력하게 만들어준다.그리디 알고리즘을 사용하여 가장 최소한의 봉지로 배달을 해야되므로 5로 먼저 나누어 준다.나누고 난 나머지가 만약 3으로 나누어 지지 않거나, 5로
💯 문제 → 정수 n을 1, 2, 3의 합으로 나타내는 총 경우의 수를 구해야 되는 문제 ! 순서도 생각해 줘야함 🎈 1 동적계획법, 그리디를 사용하는 방법 일단 먼저 3과 5으로 나누어 지지 않는 N일 경우 -1을 출력하게 만들어준다. 그리디 알고리즘을 사용하
🎈 1 동적계획법 cache를 만들어 이 곳에는 각 수의 최소 연산 횟수를 저장한다.3으로 나누어 지는 것을 기준으로 코드를 짜는데, 3으로 나누어 지지 않는 수들 중, 만약 1을 뺀 수의 연산 횟수와 2로 나눈 수의 연산 횟수를 비교하여 적용한다.<🥰 첫번째
머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정어떤 문제든 간에 소스코드를 작성하는 것은 필수 ➡ 모든 범위의 코딩 테스트 문제 유형 포함코테에서 구현 유형은 풀이를 떠올리기는 쉽지만 소스코드로 옮기기는 어려운 문제 ❗❗완전 탐색모든 경우의 수를 주저 없이 다 계산하는
여러 데이터 중에서 원하는 데이터를 찾는 과정DFS, BFS 자기 자신을 다시 호출하는 함수언제 끝날지, 종료 조건을 반드시 명시 ➡ 무한 호출 방지재귀 함수의 수행은 스택 자료구조를 이용 ➡ 마지막에 호출한 함수가 먼저 수행을 끝내야 앞의 함수 호출이 종료인접행렬 :
리스트 안에 있는 특정한 데이터를 찾기위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법정렬되지 않은 리스트에서 데이터를 찾아야 할 때 사용리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다는 장점 !따라서 순차 탐색은 이름처럼
데이터를 특정한 기준에 따라서 순서대로 나열하는 것프로그램 데이터를 가공할 대 오름차순이나 내림차순 등 정렬해서 사용하는 경우가 많음정렬 알고리즘으로 데이터를 정렬하면 이진 탐색 가능 ➡ 이진 탐색의 전처리 과정컴퓨터는 데이터의 규칠성을 직관적으로 알 수 없으며, 어떻