알고리즘/BOJ 1235

백준 11924번 PIANINO

문제 링크입니다: https://www.acmicpc.net/problem/11924 상대적 높이차가 핵심이였던 문제였습니다. 알고리즘은 아래와 같습니다.1. 상대적 높이차를 구해주는데 이전 높이에서 (현재 높이차의 부호)만큼 더해줍니다.2. 상대적 높이차가 같은 키 중에 첫 번째 키와 동일하다면 무조건 누르므로 result를 증가시킵니다.3. 상대적 높이차가 다를 경우 (현재 키와 첫 번째 키의 차)가 상대적 높이에 나누어 떨어지고 해당 몫이 음수가 아닐 경우에 map을 통해 몫이 몇번 등장했는지 표시해줍니다.(몫 = 잠재적 K)4. map을 순회하면서 제일 많이 등장한 몫이 K이고 (해당 K가 등장한 횟수 + 2번에서 구한 result)가 맞게 눌린 횟수입니다. #include #include #in..

알고리즘/BOJ 2018.09.27

백준 1302번 베스트셀러

문제 링크입니다: https://www.acmicpc.net/problem/1302 알파벳 오름차순으로 정렬을 한 뒤 탐색을 통해 빈도가 제일 높은 문자열을 찾아주면 되는 문제였습니다. #include #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); int N; cin >> N; vector v(N); for (int i = 0; i > v[i]; int maxNum = 0; int num = 0; string temp = v[0]; string result; sort(v.begin(), v.end()); for (int i = 0; i..

알고리즘/BOJ 2018.09.26

백준 5901번 Relocation

문제 링크입니다: https://www.acmicpc.net/problem/5901 다익스트라 알고리즘을 이용해 푸는 문제였습니다. 알고리즘은 아래와 같습니다.1. 장터가 있는 마을을 입력받고, 해당 마을에 장터가 있다고 표시합니다.2. 양방향 그래프를 입력받고 각각의 마을에 대해 다익스트라 알고리즘을 통해 최단경로를 계산합니다.3. 어디에 거주를 할지 모르기 때문에 모든 경우의 수를 파악합니다.i) next_permutation을 이용하여 K! 순열을 확인합니다.ii) 처음과 끝은 해당 거주지로부터 출발하므로 양 끝 경로도 더해서 계산해야합니다.iii) ii) 중 최소의 값이 정답입니다. #include #include #include #include #include #include using name..

알고리즘/BOJ 2018.09.26

백준 5900번 Cow IDs

문제 링크입니다: https://www.acmicpc.net/problem/5900 조합을 이용하여 풀어주면 되는 문제였습니다. 알고리즘은 아래와 같습니다.1. M 자리 수에서 '1'이 K개 있는 경우의 수가 총 몇개인지 DP를 통해 구해줍니다.(조합)2. '1'이 K개일 때 몇 자리수에서 N 등 이상인지를 파악합니다.3. 재귀를 이용하여 해당 등 수 숫자를 구해줍니다.i) digit 자리수이고 '1'이 K개일 때의 경우의 수보다 N이 높으면 해당 자리에 1을 추가하고 해당 등수만큼 N에서 빼준 뒤 재귀 호출을 해줍니다.ii) digit 자리수이고 '1'이 K개일 때의 경우의 수보다 N이 작거나 같으면 해당 자리에 0을 추가하고 재귀 호출 해줍니다. *정해에서는 MAX를 5000으로 잡았는데 5000C2..

알고리즘/BOJ 2018.09.26

백준 1527번 금민수의 개수

문제 링크입니다: https://www.acmicpc.net/problem/1527 간단히 재귀를 이용해 풀 수 있는 브루트 포스(Brute Force) 문제였습니다.주의할 점은 조건을 찾을 때 overflow를 방지하기 위해 long long형 변수를 매개변수로 전달해야한다는 점입니다. #include using namespace std; int A, B; long long result; //overflow 방지 위해 long long void goldMinsoo(long long num) { if (num > B) return; if (A A >> B; goldMinsoo(4); goldMinsoo(7); cout

알고리즘/BOJ 2018.09.26