문제 출처 : https://www.acmicpc.net/problem/20363
처음 작성했던 코드다.
code
#include <stdio.h> int main() { int X, Y, total = 0; scanf("%d %d", &X, &Y); int X_cnt = X, Y_cnt = Y; if (X >= Y) { total += X_cnt; total += Y_cnt; X_cnt -= Y_cnt / 10; while (1) { if (X_cnt == X && Y_cnt == Y) break; total += X - X_cnt; Y_cnt -= (X - X_cnt) / 10; X_cnt += X - X_cnt; total += Y - Y_cnt; X_cnt -= (Y - Y_cnt) / 10; Y_cnt += Y - Y_cnt; } } else { total += Y_cnt; total += X_cnt; Y_cnt -= X_cnt / 10; while (1) { if (X_cnt == X && Y_cnt == Y) break; total += Y - Y_cnt; X_cnt -= (Y - Y_cnt) / 10; Y_cnt += Y - Y_cnt; total += X - X_cnt; Y_cnt -= (X - X_cnt) / 10; X_cnt += X - X_cnt; } } printf("%d", total); return 0; }
정말 바보같이 더하고 빼고 더하고 빼고를 반복하는 과정을 생각했다.
그러나 곧 깨달았다 한꺼번에 물을주면 한번만 빼도 된다는 사실을.code
#include <stdio.h> int main() { int X, Y, total = 0; scanf("%d %d", &X, &Y); if (X >= Y) total = X + Y + (Y / 10); else total = X + Y + (X / 10); printf("%d", total); return 0; }
이게 진짜 그리디알고리즘의 정수가 아닐까 싶다.