본문 바로가기

반응형

Algorithm

(109)
프로그래머스 예상 대진표 C++ 프로그래머스 : 예상 대진표 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - 문제 A와 B가 주어졌을 때 몇번의 대결만에 만나게 될 지 구하는 문제다. - 풀이 #include using namespace std; int solution(int n, int a, int b) { int answer = 0, sum = 1;; bool left, right; while(sum != n){ answer++; sum *= 2; } while(sum != 0){ int half = sum/2; left = (a - half
[백준][C++] 15649 : N과 M (1) https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net - 문제 1부터 N까지 자연수 중에서 중복 없이 M개를 고르는 수열을 찾는 문제다. - 해설 visited를 이용해서 풀 수 있는 문제다... 음.......... 백트래킹 관련된 문제는 어떻게 설명해야 할 지 모르겠다... - 풀이 #include using namespace std; int N, M; int arr[9]; int visited[9] = {0}; void dfs(int cnt)..
[백준][C++] 11051: 이항 계수 2 https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net - 문제 nCk가 주어지면 10007로 나눈 나머지를 출력하는 문제다. - 해설 주석으로 된 부분이 스스로 풀어본 부분인데, % 10007하는 부분 때문에 문제가 발생하는 것 같다. 위와 같은 그림처럼 n-1Ck-1 이랑 n-1Ck를 알면 nCk를 구할 수 있다는 것을 이용해서 푸는 사람들이 많았고, 여러개 찾아본 결과 이러한 방식으로 밖에 푼 사람들이 없었던 것 같다. - 풀이 #include using namespace std; int a[1001][1001]; ..
[백준][C++] 2004: 조합 0의 개수 https://www.acmicpc.net/problem/2004 2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net - 문제 두 수가 주어지면 nCm에서 끝자리 0의 개수를 구하는 문제다. - 해설 nCm은 n! / (n-m)! * m!이다. 여기서 끝자리 0의 개수를 구하기 위해서는 1. n!에서 2*5의 개수를 구해서 2. (n-m)!에서 2*5의 개수를 빼고 3. m!에서 2*5의 개수를 빼면 된다. 1. n!에서 2와 5의 개수를 구해보자. 예를 들어 n이 25이라고 하면 25 / 2 = 12 (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22..
[백준][C++] 3036 : 링 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net - 문제 링이 여러개 주어지면 첫 번째 링이 한 바퀴 돌 때 나머지 링들은 몇 바퀴 도는지 푸는 문제다. - 해설 두 번째 링이 첫 번째 링보다 크면 느리게 돌고 두 번째 링이 첫 번째 링보다 작으면 빠르게 돈다는 것만 알고 기약 분수 형태로 만드는 방법을 알면 풀 수 있다. 이 것도 유클리드 호제법으로 풀 수 있다. - 풀이 #include using namespace std; int gcd(int a, int b) { retu..
[백준][C++] 2981: 검문 https://www.acmicpc.net/problem/2981 2981번: 검문 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간 www.acmicpc.net - 문제 숫자가 N개 주어졌을 때 무엇으로 이 숫자들을 나누었을 때 나머지가 같을 수 있는지 찾는 문제다. - 해설 아래에 주석처리 된 부분이 스스로 풀어 본 건데, 마지막 % 조금 남기고 계속 틀리다고 나와서 찾아봤다. 예를 들어 3,6,34,38이 주어지면 38 - 34 = 4 34 - 6 = 28 6 - 3 = 3 이 나오는데, 이 차를 이용해서 유클리드 호제법을 이용해 최소공배수를 구해준다. 결국 나누었을..
[백준][C++] 1934 : 최소공배수 https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net - 문제 두 수가 주어지면 두 수의 최소 공배수를 구하는 문제다. - 해설 유클리드 호제법이라는 것을 알게 되었는데, 이것을 이용하면 최소공배수, 최대공약수 문제가 쉽게 풀린다. - 풀이 #include #include using namespace std; int gcd(int x, int y) { return (x % y == 0) ? y : gcd(y, x % y); } i..
[백준][C++] 5086 : 배수와 약수 https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net - 문제 배수인지, 약수인지 둘 다 아닌지 구하는 문제다. - 해설 %를 이용하면 너무 쉽게 풀린다. 이걸 못 풀어서 사람들 풀이를 찾아볼 정도면 기초부터 다시 잡고 문제를 풀어야 하는 게 좋을 것 같다. - 풀이 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); i..

반응형