1) 문제: 1267. 핸드폰 요금

2) 나의 첫 풀이
- phone 배열을 지정해두고 차례로 입력받는다.
- 전체 비용을 구하고 해당 비용을 Y요금제로 적용한 경우와 M요금제로 적용한 경우를 구해 비교한다.
int main()
{
int N, Y = 0, M = 0, time[10], sum = 0;
if(N<=20 && sum<=10000){
cin >> N;
for(int i=0; i<N; i++){
cin >> time[i];
sum += time[i];
}
Y += ((sum/30)+1)*10;
M += ((sum/60)+1)*15;
if(Y>M){
cout << "M" << M;
}
else if(M>Y){
cout << "Y" << Y;
}
else
cout << "Y" << "M" << M;
}
return 0;
}
3) 나의 두 번째 풀이
- Y요금제와 M요금제 각각 계산한 비용을 구한 뒤에 작은 요금제를 선택한다.
<최종 코드>
#include <iostream>
using namespace std;
int phone[10000], Y = 0, M = 0;
int main()
{
int N;
cin >> N;
for(int i=0; i<N; i++)
cin >> phone[i];
for(int i=0; i<N; i++)
Y += ((phone[i]/30)+1)*10;
for(int i=0; i<N; i++)
M += ((phone[i]/60)+1)*15;
if(Y < M)
cout << "Y " << Y;
else if(Y > M)
cout << "M " << M;
else
cout << "Y M " << Y;
return 0;
}
4) 배운 점: 코딩 테스트의 목적을 잘 생각하자.
앞전 강의를 들을 때 코딩 테스트의 특성을 공부했었다.
짧은 시간 내에 문제가 원하는 조건만 만족하는 상태로 코드를 구현하라고 했다. 정리하자면 메모리 하나하나, 코드의 간결성에 큰 집중을 기울이기보단, 제한 조건을 만족하며 빠르게 구현하라는 것.
그럼에도 이번 문제를 풀며 전체 합을 구해 요금제 2개의 경우를 각각 나누고, 해당 케이스 별로 원하는 출력 형태를 위해 추가적으로 코드를 작성하는 방법을 선택했다. 하지만 바킹독의 코드를 보며 처음부터 요금제를 계산하는 식을 정해두고 값만 비교하여 2번 나누어야 하는 코드를 단축시켰음을 알 수 있었다.
'Computer Science > PS' 카테고리의 다른 글
[PS] 15552. 빠른 A+B (1) | 2023.12.19 |
---|---|
[PS] 10804. 카드 역배치 (2) | 2023.12.18 |
[PS] 10093. 숫자 (0) | 2023.12.16 |
[PS] 2309. 일곱 난쟁이 (0) | 2023.12.16 |
[PS] 2587. 대표값2 (0) | 2023.12.16 |