자료구조&알고리즘/백준
[C++] 백준 5543번 - 상근날드
celinayk
2022. 12. 27. 19:29
반응형
문제
상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.
햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.
햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.
입력
입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가격은 100원 이상, 2000원 이하이다
출력
첫째 줄에 가장 싼 세트 메뉴의 가격을 출력한다
접근
제일 처음에는 햄버거를 저장하는 벡터, 음료를 저장하는 벡터를 만든 후 각각 벡터를 돌면서 순서대로 가장 작은 수가 제일 앞에 오게 정렬해준 다음 각각의 0번째 인덱스의 값들을 더해서 출력하는 방법을 이용했다
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int>burger(3);
vector<int>bev(2);
for (int i = 0; i < burger.size(); i++) {
scanf("%d", &burger[i]);
}
for (int i = 0; i < bev.size(); i++) {
scanf("%d", &bev[i]);
}
int tmp;
for (int i = 0; i < burger.size() - 1; i++) {
for (int j = 0; j < burger.size() - 1 - i; i++) {
if (burger[j] > burger[j + 1]) {
tmp = burger[j];
burger[j] = burger[j + 1];
burger[j + 1] = tmp;
}
}
}
for (int i = 0; i < bev.size() - 1; i++) {
for (int j = 0; j < bev.size() - 1 - i; i++) {
if (bev[j] > bev[j + 1]) {
tmp = bev[j];
bev[j] = bev[j + 1];
bev[j + 1] = tmp;
}
}
printf("%d", burger[0]+bev[0]-50);
return 0;
}
하지만 컴파일 에러라고 떴고 결론은 틀린답이었다.
내가 봐도 이중반복문을 두번이나 도는게 비효율적으로 느껴졌다. 그래서 다른분들의 코드를 참고해서 새로운 접근방법으로 문제를 풀었다.
코드
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main() {
int B = 0;
int D = 0;
int b, d;
for (int i = 0; i < 3; i++) {
scanf("%d", &b);
if (B == 0) {
B = b; //처음입력할때
}
if (b < B) {
B = b; //B에값있는데b가더작으면그게B가됨
}
}
for (int i = 0; i < 2; i++) {
scanf("%d", &d);
if (D == 0) {
D = d;
}
if (d < D) {
D = d;
}
}
printf("%d", B + D - 50);
return 0;
}
리뷰
가장작은 햄버거값을 B라고 하면 B를 처음부터 0으로 고정해놓고 b를 입력받는다.
B랑 비교하면서 일일히 값을 다 받아서 정렬할 필요 없이 B값을 바로 알수 있다
학습
되게 쉬운 문제같은데 나는 이런 알고리즘을(?) 생각하지 못했다. 우선 값을 전부 받은 후 이후에 어떻게 가장 작은 수를 도출해낼지에 대해서 초점이 맞춰져 있었다. 애초에 값을 다 받지말고 이렇게 간단하게 풀 수도 있다는 것을 깨달았다. 나도 언젠가 이렇게 간단하게 풀 수 있는 날이 올까....하여튼 문제를 해결 할때 더 폭넓은 관점에서 바라볼수있도록 노력해야겠다 그러기위해선 문제를 많이 풀어야겟쥐...ㅋ
출처
5543번: 상근날드
입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가
www.acmicpc.net