목록Algorithm (C++)/수학 (5)
차근차근

0. 제목 백준 2869 달팽이는 올라가고 싶다 BOJ 2869 달팽이는 올라가고 싶다 C++ 2869 달팽이는 올라가고 싶다 1. 문제 https://www.acmicpc.net/problem/2869 2. 풀이 제한시간이 짧기 때문에 for문으로 풀면 시간초과가 나온다. 다른 방식 풀이는 다음과 같다. 하루에 A-B 만큼 올라갈 수 있다. 도달하는 날에는 미끄러질 필요가 없는 것을 고려하여 식을 세운다. V-A 만큼 가면 도착이다. 따라서 V-A까지 A-B 씩 가는 것이다. V-A가 A-B로 나누어 떨어지지 않으면 높이에서 하루 가는 거리를 나눈 값에서 하루를 더해주고 나누어 떨어지면 그대로 높이에서 하루 가는 거리를 나눈 값을 출력해준다. 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 ..

0. 제목 백준 2003 수들의 합 2 BOJ 2003 수들의 합 2 C++ 2003 수들의 합 2 1. 문제 https://www.acmicpc.net/problem/2003 2. 풀이 startIdx를 이용해 합의 시작점을 저장해준다. sum이 구하고자 하는 합 M과 같아지면 가능한 경우의 수인 cnt를 1증가시켜주고 M을 넘어가면 while문을 빠져나간다. 만약 while문에서 sum이 M보다 작고 startIdx가 배열의 마지막 원소를 지나치면 즉, N+1 이 되면 while문을 빠져나온다. cnt를 출력하면 정답니다. 그런데 이러한 문제는 투포인터를 사용한다고 하면 된다. 위 방법도 그와 비슷한 방법이지만 투포인터의 내용을 살려 또 다른 코드를 첨부하겠다. 투포인터 방식을 사용하면 위 방식보다 ..

0. 제목 백준 1789 수들의 합 BOJ 1789 수들의 합 C++ 1789 수들의 합 1. 문제 https://www.acmicpc.net/problem/1789 2. 풀이 while문이 돌면서 sum에 num을 더해준다. num을 하나 더해주었으므로 cnt도 1 더해준다. 만약 sum이 구하고자 하는 값 S보다 커지면 현재 cnt 에서 1을 빼준다. 예를 들면, 18을 구하고 싶었다면 1,2,3,4,5,6 까지 가면 21로 18보다 커지고 3을 빼면 되므로 1,2,4,5,6 즉, 5개가 나온다. num은 한 loop가 지날때 마다 1씩 증가한다. 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include using names..

0. 제목 백준 1735 분수 합 BOJ 1735 분수 합 C++ 1735 분수 합 1. 문제 https://www.acmicpc.net/problem/1735 2. 풀이 유클리드 호제법을 사용하였다. 유클리드 호제법은 두 정수의 최대 공약수를 구하는 방법이다. 먼저 최대 공약수가 아닌 분모의 곱을 사용하여 합을 구한다. 그 후 분모와 분자의 최대공약수를 유클리드 호제법을 사용하여 구하고 분자와 분모를 최대공약수로 나누어준다. 3. 코드 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 #include using namespace std; int gcd(int x, int y){ int z = 1; while(y !..

0. 제목 백준 1094 막대기 BOJ 1094 막대기 C++ 1094 막대기 1. 문제 https://www.acmicpc.net/problem/1094 2. 풀이 처음에 길이가 64인 막대기를 가지고 있다. 현재 막대기가 만들고자 하는 막대기보다 길면 가지고 있는 막대기를 반 자른다. 짧다면 만들고자 하는 막대기에서 현재 막대기 길이를 뺀 후 갱신기킨다. 또한 막대기 한 개를 사용했으므로 cnt값을 1 증가시켜준다. X가 0이 되면 루프가 종료되고 cnt값이 필요한 막대기의 수가 된다. 3. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include using namespace std; int main(int argc, const cha..