일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 닌텐도 스위치 2
- i자형 인재
- blender
- c#
- 자료구조
- 그리디 알고리즘
- T자형 인재
- 다이나믹프로그래밍
- 배열 리스트
- 영어
- windows 12
- unity engine
- 카니발대학교 공대강국
- VPS
- 시작
- 마인크래프트
- 브루트포스 알고리즘
- 스택
- 우선순위 큐
- 잴다의 전설 티어스 오브 더 킹덤
- 라자냐
- 그래픽 디자인
- VRoid Studio
- 2025 대한민국 채용박람회
- 코딩테스트
- 택시 기하학
- 큐
- 이진 탐색
- 빅오 표기법
- vrm posing desktop
- Today
- Total
WalkerJei's Lifelog
구매 가능한 활 C# 본문
세부 정보
- 문제명: 구매 가능한 활
- 언어: C#
- 비고:
문제
명궁이 되기 위해 활을 사러 간 막스맨이 있었다. 가게에 들어오니까 다양한 종류의 활이 있었다. 활마다 요구하는 근력도 다르고, 가격 또한 달랐다. 막스맨은 자신의 근력과 현재 가진 돈에 따라 구매해서 사용 가능한 활의 목록을 작성하려고 한다. 명궁이 되기 위해 활을 사려는 막스맨의 현재 상태에 따라 살 만한 활을 추천해 주자.
입력
첫째 줄에 활의 종류 개수 N(1 이상)이 자연수 형태로 주어진다.
둘째 줄부터 N개의 줄에는 활의 이름, 요구 근력, 가격을 공백으로 구분해서 입력해야 한다. 활의 이름은 문자열, 요구 근력과 가격은 자연수이다.
끝에서 두 번째 줄에 막스맨의 근력을 입력한다.
마지막 줄에는 막스맨이 가진 돈을 입력한다.
출력
활의 이름과 구매해서 사용 가능한 여부를 공백으로 구분해서 출력한다.
구매해서 사용 가능한 여부는 "Possible" 이나 "Impossible" 중 하나를 출력해야 한다.
예제 입력:
4
BritishLongBow 100 1500
JapaneseBow 90 1500
KoreanBow 75 3000
IndiaIronBow 120 1000
95
1500
예제 출력:
BritishLongBow Impossible
JapaneseBow Possible
KoreanBow Impossible
IndiaIronBow Impossible
풀이 펼쳐보기: 일단 먼저 자력으로 풀어보고 열어볼 것을 권한다.
풀이
var는 다양한 형태의 값을 입력받을 수 있다.
+=는 문자열 입력을 할 때 변수 뒷부분에 입력한 문자열을 덧붙일 때 사용할 수 있다.
class BuyingBow
{
static void Main(String[] args)
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 활의 종류 개수 입력
int bowCount = Convert.ToInt32(sr.ReadLine());
// 활의 종류 클래스 선언
Bow[] bow = new Bow[bowCount];
// 활의 이름, 요구 근력, 가격 입력
for (int i = 0; i < bowCount; i++)
{
var inputBow = sr.ReadLine().Split();
bow[i] = new Bow(inputBow[0], Convert.ToInt32(inputBow[1]), Convert.ToInt32(inputBow[2]));
}
// 나의 근력 입력
int myStr = Convert.ToInt32(sr.ReadLine());
// 내가 현재 가진 돈 입력
int myMoney = Convert.ToInt32(sr.ReadLine());
// 구매 가능한 활 목록
var bowPossible = "";
for (int i = 0; i < bowCount; i++)
{
// 활의 이름 가져오기
bowPossible += bow[i].Name + " ";
// 나의 근력의 활의 요구 근력보다 낮거나 내가 가진 돈이 활의 가격보다 적으면 불가능 저장
if (myStr < bow[i].RequireStr || myMoney < bow[i].Price)
bowPossible += "Impossible" + "\n";
// 그 외에는 가능 저장
else bowPossible += "Possible" + "\n";
}
// 구매 가능한 활 목록 출력
sw.WriteLine(bowPossible);
sr.Close();
sw.Close();
}
}
class Bow
{
string name; // 이름
public string Name
{ get { return name; } }
int requireStr; // 요구 근력
public int RequireStr
{ get { return requireStr; } }
int price; // 가격
public int Price
{ get { return price; } }
public Bow(string name, int requireStr, int price)
{
this.name = name;
this.requireStr = requireStr;
this.price = price;
}
}
후기
클래스를 활용한 프로그래밍을 복습하기 위해서 해 보았다. 클래스를 만들 때도 고민하는 시간을 최소화해야 한다. 그런 의미에서 연습을 해 보았다. 그리고 var는 StringBuilder와 비슷한 결과를 출력할 수 있다. var에서 +=, +를 쓴다면 StringBuilder는 Append()를 사용하는 식이다.
'소프트웨어 개발 > 코딩테스트(자체 문제)' 카테고리의 다른 글
자녀 결혼순서 C# (0) | 2025.05.02 |
---|