알고리즘/프로그래머스(30)
-
[프로그래머스] [C++]징검다리 (binary-search)
1. 문제 코딩테스트 연습 - 징검다리 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 징검다리 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 programmers.co.kr 2. 결정 문제 이진 탐색을 사용하는 문제 보통 dp로 풀 수 있지만 n이 클 때 보통 사용한다. 이 문제도 dp로 풀 수 있지만 입력이 엄청 커 이진 탐색을 사용하여 최소의 거리의 최대값을 구하였다. 여기서 이진 탐색은 lo 값을 리턴하는데 참인 조건일때 lo를 mid로 설정하기 때문에 lo를 리턴해야한다. (참인 조건일때 hi를 mid로 설정하면 hi값 리..
2021.03.29 -
[프로그래머스] [C++] 단어 변환 (bfs)
1. 문제 코딩테스트 연습 - 단어 변환 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 2. bfs 이 문제는 주어진 단어에 대한 그래프를 만들고 깊이 우선 탐색을하면 쉽게 문제가 해결된다. begin 단어를 word에 추가하여 맨마지막 인덱스가 src 그래프를 만들때 target이랑 같은 단어가 있으면 그 인덱스를 dest로 설정하여 dest 가 초기값인 -1 이면 0을 리턴하고 아니면 bfs를 수행항다. 이때 ..
2021.03.28 -
[프로그래머스] [C++] 등굣길 (dp)
1. 문제 코딩테스트 연습 - 등굣길 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 2. 풀이 배열 m*n을 만든다음 해당 상태에 방문안했으면 -1 방문했으면 이전 값 리턴 하는 식으로 작동한다. 이 때 우물을 전부 방문했다고 가정하여 0으로 두면 자연스럽게 결과값이 나온다. 123456789101112131415161718192021222324252627#include #include using namespace std; const int di..
2021.03.27 -
[프로그래머스] [C++] 위장 (brute-force)
1. 문제 코딩테스트 연습 - 카펫 | 프로그래머스 (programmers.co.kr) 2. 풀이 1 b + y 를 높이 1부터 시작하여 너비 를 차근 차근 구하는 풀이 이다. 이때 너비는 n 보다 작으며 높이로 나눠질 수 있어야한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include using namespace std; vector bf(int w, int h, const int& brown, const int& n) { int tmpBrown = (h
2021.03.26 -
[프로그래머스] [C++] 큰 수 만들기 (greedy)
1. 문제 코딩테스트 연습 - 큰 수 만들기 | 프로그래머스 (programmers.co.kr) 2. 풀이 1 간단하게 생각해서 각 숫자를 뒤에서부터 인덱스를 전부 기록했다. 그 다음 가장 큰것 중 완성 시킬 수 있는 것을 앞쪽부터 선택해나가면 답이 완성된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 string selectNum(string& number, string& answer, int last, int k, vector& idx) { if(k == 0) return answer; for(int i = 9; i > -1; i--) { while(idx[i].size() !=..
2021.03.26 -
[프로그래머스] [C++] 이중우선순위큐 (sort, bst, map)
1. 문제 이중 우선순위 큐는 다음 연산을 할 수 있다. | 숫자 : 큐에 주어진 숫자를 삽입 D 1: 큐에서 최댓값을 삭제 D -1: 큐에서 최솟값을 삭제 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질때. 모든 연산을 처리한 후 큐가 비어있으면 [0, 0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현하여라. operationsd의 원소는 "명령어 데이터" 형식으로 만약 최댓값/최솟값을 삭제하는 연산에서 최댓값/ 최솟값이 둘 이상인 경우, 하나만 삭제한다. 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시한다. 2. insertionSort를 활용한 풀이 바이너리 서치 트리를 구현해서 문제를 해결할 수 있지만 균형잡힌 바이너..
2021.03.23