본문 바로가기

백준

10707 수도요금 #include #include using namespace std; int main() { int a, b, c, d, p; scanf("%d %d %d %d %d", &a, &b, &c, &d, &p); int coast_x = p * a; int coast_y = b; if(p > c) coast_y += d * (p - c); printf("%d", min(coast_x, coast_y)); } 입력을 정의했다 어떻게 풀지 적어봤다. 쉬워서 할말이 없다 #include #include using namespace std; int main() { int a, b, c, d, p; scanf("%d %d %d %d %d", &a, &b, &c, &d, &p); int coast_x = p * a; i.. 더보기
5532 방학 숙제 먼저 문제 정리부터 했다. 정리하면서 어떻게 풀지 감이왔다. 그래서 바로 식으로 적어버렸다. 그런데 만약 페이지가 딱 떨어지지 않으면 하루를 더해야 하고 나누어 떨어지면 하루를 더하면 안된다. 여기서 조금 애매했다. 그냥 조건문으로 확인하면 쉽지 근데 더 간결하게 짜고 싶어서 고민이었다. #include #include using namespace std; int main() { int l, a, b, c, d; scanf("%d %d %d %d %d", &l, &a, &b, &c, &d); printf("%d", l - max(a/c + max(a%c>0?1:0,0), b/d + max(b%d>0?1:0,0))); return 0; } 결론은 이렇다 조건문으로 구구절절하게 하기 싫어서 삼항연산자로 때려.. 더보기
10162 전자레인지 문제 정의를 했다 전에 알고리즘 수업을 들을 때 이런 문제를 푼 것 같아서 설마 그건가 했는데 그냥 나누는 문제였다. 지금 생각해보니 그리드 할 때 배웠던 것 같다. 이상한 나라 동전 문제 (..) #include int main() { int t; scanf("%d", &t); if(t % 10 != 0){ printf("-1"); return 0; } printf("%d ", t / 300); t %= 300; printf("%d ", t / 60); t %= 60; printf("%d", t/10); return 0; } 별로 어렵지는 않았다. 그냥 무난.. 더보기
2480 주사위 세 개 먼저 문제를 정의했다 다음으로 전자종이에 알고리즘을 짜려 하다 이 알고리즘은 제대로 동작하지 않는다는 걸 깨달았다. #include #include using namespace std; int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); if(a == b && b == c) printf("%d", 10000 + a*1000); else if(a == b || b == c ) printf("%d", 1000 + b*100); else if(c == a) printf("%d", 1000 + a*100); else printf("%d", max({a, b, c})*100); return 0; } 그래서 그냥 조건문으로 풀었다. stl의 algorithm에 ma.. 더보기
2530 인공지능 시계 먼저 문제를 읽고 이런 식으로 조건을 정리했다. 그리고 생각한 풀이 전에는 눈에 힘 빡 주고 풀었는데 이제는 그냥 적는게 편하다. 정리도 되고 놓친 조건 찾기도 쉽고 저기 오른쪽에 sec %= 60으로 적었는데 (59 + 2) % 60이 되어야 할 것 같다 (코드에는 반영 함) #include int main() { int now_hour, now_min, now_sec; int time; scanf("%d %d %d %d", &now_hour, &now_min, &now_sec, &time); int hour = time / 3600; time %= 3600; int minute = time / 60; time %= 60; int sec = time; int add = 0; add = (now_sec .. 더보기
1712 손익분기점 전에 달팽이 나무 타는 문제를 풀었는데 그때도 이런 식으로 해결했다. 부등식을 세우고 마지막에는 올림해서 n 구하기 아 그런데 문제를 잘못 읽었다. 총 수입이 총 비용보다 많아져야 하므로 같으면 안 된다. 그래서 floor(A / (C - B)) + 1을 해줘야 올바른 식이 된다. #include #include using namespace std; int main() { int a, b, c; scanf("%d %d %d", &a, &b, &c); printf("%d", (int)floor((double)a / (double)(c-b)) + 1); } 아 그런데 틀렸다! 다시 확인해봐야겠다. 머리 안 돌아가서 밥 먹고 다시 해야지 밥 먹고 다시 돌아왔다 몰랐는데 손익 분기점이 존재하지 않는 경우도 생각.. 더보기
1212 8진수 2진수 #include #include using namespace std; int main() { string num_str; cin >> num_str; string octal_number[8]; string first_octal_number[8]; octal_number[0] = "000"; octal_number[1] = "001"; octal_number[2] = "010"; octal_number[3] = "011"; octal_number[4] = "100"; octal_number[5] = "101"; octal_number[6] = "110"; octal_number[7] = "111"; first_octal_number[0] = "0"; first_octal_number[1] = "1"; fi.. 더보기
10039 평균점수 #include int main() { int a; int sum = 0; for(int i = 0; i < 5; i++){ scanf("%d", &a); if(a < 40) a = 40; sum += a; } printf("%d", sum/5); } 40점보다 작으면 40점으로 처리하므로 조건문을 통해서 40점 이하인 것들을 잡아냈다. 그런데 이렇게 if문으로 확인하는 것 말고도 라이브러리의 max와 min을 쓰는 방법도 있다. #include #include using namespace std; int main() { int a; int sum = 0; for(int i = 0; i < 5; i++){ scanf("%d", &a); sum += max(40, a); } printf("%d", sum/.. 더보기