목록분류 전체보기 (295)
The Way
백준 온라인 저지(BOJ) 1008번 문제https://www.acmicpc.net/problem/1008 1. 문제 요약두 수 A와 B를 입력받고 A/B를 출력. 절대/상대 오차는 10^-9까지 허용. 2. 알고리즘printf("%.9lf")를 써도 되지만, c++을 사용하는 사람답게 cout을 사용해보자.cout은 정확도를 아래 코드를 이용해 조절한다.cout.precision(15); 이는 정확도를 15자리까지 표시해준다는 의미이다.소숫점 아래 15자리가 아니고, 유효숫자 15개라는 것에 유의하자. 예컨대 이 문제에 해당하지는 않지만, 123456.78912345라는 숫자가 있을 때cout.precision(6)를 한 뒤 출력하면 123457로 나온다. 소숫점 아래 자리수를 정해주려면, cout >..
백준 온라인 저지(BOJ) 1004번 문제 https://www.acmicpc.net/problem/1004 1. 문제 요약 여러 원에 둘러쌓인 두 점이 있다. 한 점에서 다른 한 점으로 갈 때, 지나야 하는 경계의 최소 개수는? (원의 경계가 맞닿거나 교차하는 경우는 없다) 2. 알고리즘 원의 경계가 맞닿거나 교차하는 경우는 없다는 조건 때문에 문제풀이가 쉬워진다. 두 점이 i) 둘 다 원 안에 있다면 0번 ii) 둘 다 원 밖에 있다면 0번 iii) 둘 중 하나만 원 안에 있다면 1번 씩 더해주면 된다. 1002번과 마찬가지로 거리를 비교할 때 sqrt를 쓰지 않는 편이 이롭다. 3. 코드 #include int main() { int T; scanf("%d", &T); for (int i = 0; ..
백준 온라인 저지(BOJ) 1003번 문제https://www.acmicpc.net/problem/1003 1. 문제 요약주어진 코드로 피보나치 수를 구할 때, base case가 몇 번 호출되는지 구하기 2. 알고리즘2-1. 기본적인 생각전역 변수를 만들어서 해당 영역이 호출될 때마다 더해주면 간단하다.그런데 N이 40 정도 될 경우 1억 번 정도를 더하게 되는데, 시간 낭비가 상당하다. 2-2. 재귀적 성질 이용하기fibonacci(n) = fibonacci(n - 1) + fibonacci(n - 2)이므로1 이상의 n이라면 앞의 두 값을 더한 것과 같은 값을 갖는다. 이 성질을 이용하면 아주 빠르게 답을 구해낼 수 있다.조금만 생각해보면 fibonacci(n)을 실행했을 때 (n > 0일 때)re..
백준 온라인 저지(BOJ) 1002번 문제https://www.acmicpc.net/problem/1002 1. 문제 요약두 사람의 좌표 (x1, y1), (x2, y2)와 해당 점으로부터의 거리 r1, r2가 주어질 때가능한 좌표의 수 출력 2. 알고리즘두 원의 위치관계를 이용하는 문제이다(참고: http://mathbang.net/101)거리를 비교할 때, 실제 거리를 구하려면 제곱근을 씌워야 하지만여기서는 단순 크기비교이므로 제곱을 한 값을 비교하는 것이 여러모로 깔끔하다.sqrt를 사용하면 include를 하나 더 해야되는 것은 그렇다 쳐도 double이 튀어나오는데 이는 항상 오차를 야기하기 때문이다. 3. 코드 #include using namespace std; int main() { int..
백준 온라인 저지(BOJ) 3052번 문제https://www.acmicpc.net/problem/3052 1. 문제 요약숫자 10개가 입력될 때, 이 숫자들을 42로 나눈 나머지 중 서로 다른 값이 몇 개 있는지 출력하기 2. 알고리즘나머지를 구하는 과정은 문제될 것이 없다.10개 중 서로 다른 값이 몇 개 있는지 판별하는 것이 관건인데,나머지는 0~41까지로 그렇게 크지 않으므로 그냥 길이 42짜리 배열을 생성하면 쉽다. 3. 코드 #include using namespace std; int main() { int remain[42] = { 0 }; int t; for (int i = 0; i > t; remain[t % 42] = 1; } int count = 0; ..