Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

네박자대로

[백준 15953번] 상금 헌터 (C++) 본문

알고리즘

[백준 15953번] 상금 헌터 (C++)

ysyang 2021. 1. 16. 08:05

2018 카카오 코드 페스티벌 예선 1번 문제

www.acmicpc.net/problem/15953

 

15953번: 상금 헌터

첫 번째 줄에 제이지가 상상력을 발휘하여 가정한 횟수 T(1 ≤ T ≤ 1,000)가 주어진다. 다음 T개 줄에는 한 줄에 하나씩 제이지가 해본 가정에 대한 정보가 주어진다. 각 줄에는 두 개의 음이 아닌

www.acmicpc.net

여태까지는 알고리즘을 머릿속에서 정리하기도 전에 바로 코드부터 무작정 짰었다.

그러다보니 항상 코드도 지저분하고 복잡해져서 주석을 달지 않으면 내가 짠 것도 못알아보게 되었는데

그 습관을 고치기 위해서 블로그에 알고리즘을 찬찬히 정리하고 손코딩으로 충분히 확신이 들 때까지 

절대 키보드에 손을 올리지 않으려고 한다!

 

첫 게시글에서 그치지 말고 앞으로 꾸준히 문제 열심히 풀자..!

 

 

 

 

 


 

 

 

 

문제로 돌아가서!

 

 

생각한 알고리즘은 다음과 같다.

우선 1회 본선 상금 테이블과 2회 본선 상금 테이블을 배열로 구현한다.

(직접 손으로 배열 초기화를 할지 코드를 짜서 배열 초기화를 할지 고민했는데

개수도 많지 않고 복잡하지 않은 듯 해서 복붙하며 배열을 초기화 시켜주었다.)

 

즉, prizeTable1[0]은 1등의 상금, prizeTable1[1]은 2등의 상금으로, 바로 호출해서 계산할 수 있도록 했다. 복잡하니 (원)단위가 아닌 (만원)단위로 생각하자.

int prizeTable1[21] = {500,300,300,200,200,200,50,50,50,50,30,30,30,30,30,
10,10,10,10,10,10 };

int prizeTable2[31] = {512,256,256,128,128,128,128,64,64,64,64,64,64,64,64,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};

 

 

 

 

 

다음 MyPrize(int a, int b) 함수를 구현하였는데

매개변수 a등과 b등을 입력 받았을 때 총 상금을 계산해주는 함수이다.

본선에 진출했든 하지 않았든 1회와 2회 본선대회 각각 21등, 31등 안에 들지 않으면

어차피 상금은 없기 때문에 아래와 같이 if문을 정의했다.

 

1회와 2회 본선대회에 대한 상금을 total 변수에 더한 뒤, (만원)단위를 (원)단위로 환산하기 위해

10000을 곱해준 뒤 리턴한다.

int MyPrize(int _a, int _b)
{
	int total = 0;
	
	if ((_a >= 1) && (_a <= 21))
	{
		total += prizeTable1[_a - 1];
	}

	if ((_b >= 1) && (_b <= 31))
	{
		total += prizeTable2[_b - 1];
	}

	total *= 10000;
	return total;

}

 

 

 

 

 

 


 

 

 

testcase까지 입력받아 계산하는 전체 코드는 다음과 같다.

#include <iostream>
using namespace std;

int prizeTable1[21] = {500,300,300,200,200,200,50,50,50,50,30,30,30,30,30,
10,10,10,10,10,10 };

int prizeTable2[31] = {512,256,256,128,128,128,128,64,64,64,64,64,64,64,64,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};

int MyPrize(int _a, int _b)
{
	int total = 0;
	
	if ((_a >= 1) && (_a <= 21))
	{
		total += prizeTable1[_a - 1];
	}

	if ((_b >= 1) && (_b <= 31))
	{
		total += prizeTable2[_b - 1];
	}

	total *= 10000;
	return total;

}


int main()
{
	int testcase;
	cin >> testcase;

	int a;
	int b;

	for (int i = 0; i < testcase; i++)
	{
		cin >> a >> b;
		cout << MyPrize(a, b) << "\n";
	}

	return 0;
}

 

 

 

 

제출한 결과 정답!

 

 

 

 

 

Comments