조건문 복습 및 생각
Q10. 주문 상태 변경
문제
현재 주문 상태, 현재 잔액, 처리할 명령을 한 줄씩 입력받아 주문 하나를 처리함. 주문 금액은 3000원이며 현재 상태는 접수·결제·발송·취소 중 하나, 잔액은 0~100000의 정수임. 결제·발송 상태의 잔액은 이미 주문 금액을 지불한 뒤의 값임. 명령은 대소문자를 구분함.
- pay: 접수 상태에서만 결제할 수 있음. 잔액이 충분하면 3000원을 차감하고 결제로 바꾸며 결제 완료를 출력함. 부족하면 잔액 부족, 다른 상태라면 결제할 수 없는 상태를 출력함.
- ship: 결제 상태만 발송으로 바꾸고 발송 완료를 출력함. 다른 상태이면 발송할 수 없는 상태를 출력함.
- cancel: 접수 상태이면 취소로 바꾸고 접수 취소를 출력함. 결제 상태이면 3000원을 환불하고 취소로 바꾸며 결제 취소 및 환불을 출력함. 발송이면 발송 후 취소 불가, 취소이면 이미 취소됨을 출력함.
- 그 외 명령은 알 수 없는 명령을 출력함.
거절된 명령은 상태와 잔액을 바꾸지 않음. 처리 메시지 다음에 최종 상태와 잔액을 출력함.
입력 예시
결제
2000
cancel
예상 결과
결제 취소 및 환불
상태: 취소
잔액: 5000
내가 작성한 코드
using System;
string order = Console.ReadLine();
int balance = int.Parse(Console.ReadLine());
string command = Console.ReadLine();
const int Price = 3000;
if (command == "pay")
{
if (order == "접수")
{
if (balance >= Price)
{
balance -= Price;
order = "결제";
Console.WriteLine("결제 완료");
}
else
{
Console.WriteLine("잔액 부족");
}
}
else
{
Console.WriteLine("결제할 수 없는 상태");
}
}
else if (command == "ship")
{
if (order == "결제")
{
order = "발송";
Console.WriteLine("발송 완료");
}
else
{
Console.WriteLine("발송할 수 없는 상태");
}
}
else if (command == "cancel")
{
if (order == "접수")
{
order = "취소";
Console.WriteLine("접수 취소");
}
else if (order == "결제")
{
balance += Price;
order = "취소";
Console.WriteLine("결제 취소 및 환불");
}
else if (order == "발송")
{
Console.WriteLine("발송 후 취소 불가");
}
else if (order == "취소")
{
Console.WriteLine("이미 취소됨");
}
}
else
{
Console.WriteLine("알 수 없는 명령");
}
Console.WriteLine($"상태: {order}");
Console.WriteLine($"잔액: {balance}");
선생님과 작성한 코드
using System;
const int Price = 3000;
string status = Console.ReadLine();
int balance = int.Parse(Console.ReadLine());
string command = Console.ReadLine();
string result = string.Empty;
switch (command)
{
case "pay":
if (status != "접수")
{
result = "결제할 수 없는 상태";
}
else if (balance < Price)
{
result = "잔액 부족";
}
else
{
balance -= Price;
status = "결제";
result = "결제 완료";
}
break;
case "ship":
if (status == "결제")
{
status = "발송";
result = "발송 완료";
}
else
{
result = "발송할 수 없는 상태";
}
break;
case "cancel":
switch (status)
{
case "접수":
status = "취소";
result = "접수 취소";
break;
case "결제":
balance += Price;
status = "취소";
result = "결제 취소 및 환불";
break;
case "발송":
result = "발송 후 취소 불가";
break;
case "취소":
result = "이미 취소됨";
break;
default:
result = "알 수 없는 상태";
break;
}
break;
default:
result = "알 수 없는 명령";
break;
}
Console.WriteLine(result);
Console.WriteLine($"상태: {status}");
Console.WriteLine($"잔액: {balance}");
내가 코드를 작성할 땐 if문을 최대한 사용하여 복잡한 코드가 작성 되었다.
선생님과 작성한 코드는 switch를 사용하여 간결한 코드가 작성 되었다.
두 코드 모두 결과는 같이 나오지만 문제를 어떻게 해석하느냐에 따라 코드가 완전히 다르게 나온다는 사실을 깨달았다.
추후에 취업을 하게 되어 다른 사람의 기획안을 보고 기획자의 의도에 맞춰 정확한 코드를 작성하기 위해서는 기획안을 짠 기획자와의 커뮤니케이션이 반드시 필요할 것으로 보인다. 또한 내가 이해하는 부분이 맞는지, 작성하는 코드가 불피요하진 않을지에 대해 많은 생각을 할 수 있을 것으로 예상된다.



