boj 1008
문제 자체는 아주 기본적이었지만 출력 조건이 절대/상대 오차 허용 까지 허용한다는 점에서 그 의미를 파악하지 못하여 어려움이 있었습니다.
이 말은 다르게 표현하면 "출력값을 소수점 아래 9개 이상 출력한다"로 나타낼 수 있습니다. 아래와 같이 나타낼 수 있습니다.
#include <stdio.h>
int main() {
double a,b;
scanf("%lf %lf", &a, &b);
printf("%0.9lf\n", a/b);
return 0;
}
전 처음에 %0.9없이 double형 자료형을 사용하면 출력도 그 범위만큼 출력될 줄 알았는데 출력하니 1/3의 결과가 0.333333
로 나오더라구요. 따라서 소수점 아래 7자리 이상에 대해서 명시적으로 범위를 명시해야한다는 점을 배울 수 있었습니다.
그리고 더불어 double
타입의 경우 입력받을 때, 서식받을 때 모두 서식문자로 %lf
를 사용함을 알 수 있었습니다.
boj 2839
문제를 읽고 해결방법을 찾으면서 전 3이나 5을 나누면서 문제를 푸는 방식이 아닌 동적계획법을 이용하여 문제를 해결하는 방식이 떠올랐습니다.(이 단계에서 동적계획으로 푸는 것이 아닐 것이라 생각하면서도..)
따라서 5까진 미리 숫자를 부여하고 이후엔 반복문 2개를 돌려가면서 원하는 값까지 기존 값을 이용하여 하나하나 구하며 해결하였습니다. 나의풀이
하지만 다른 사람의 풀이를 보니 3이나 5을 나누면서 문제를 풀 수 있더라구요. 그들이 구현한 로직은 아래와 같습니다.
- 5의 배수를 아니면 -3을 반복문 돌려뺀다. 여기서 한번 실행할 때마다 answer에 +1 증감한다
- 1번 실행 후 음수가 되면 -1을 반환하고 그게 아니면(양수이면) 그 수를 5로 나눈 몫만큼 더한다.
왜 그런지는 정확히 모르겠지만 입력받은 수에서 5의 배수가 만날 때까지 -3을 빼고(뺀 횟수만큼 answer +1) 만약 5의 배수일 때 그 몫만큼 answer 더한 것이 답이 되는 것 같습니다. -3뺄 때 마지막까지 5의 배수가 안나오면 결국 음수로 되게 되는데 그러한 개념도 재미있네요 :)
'Algorithm > problem solving' 카테고리의 다른 글
Today's Algorithm(2018-10-06) (0) | 2018.10.07 |
---|---|
Today's Algorithm(2018-10-05) (0) | 2018.10.05 |
Today's Algorithm(2018-10-04) (0) | 2018.10.05 |
Today's Algorithm(2018-10-03) (0) | 2018.10.03 |
Today's Algorithm(2018-10-02) (0) | 2018.10.02 |