네박자대로
[백준 15953번] 상금 헌터 (C++) 본문
2018 카카오 코드 페스티벌 예선 1번 문제
여태까지는 알고리즘을 머릿속에서 정리하기도 전에 바로 코드부터 무작정 짰었다.
그러다보니 항상 코드도 지저분하고 복잡해져서 주석을 달지 않으면 내가 짠 것도 못알아보게 되었는데
그 습관을 고치기 위해서 블로그에 알고리즘을 찬찬히 정리하고 손코딩으로 충분히 확신이 들 때까지
절대 키보드에 손을 올리지 않으려고 한다!
첫 게시글에서 그치지 말고 앞으로 꾸준히 문제 열심히 풀자..!
문제로 돌아가서!
생각한 알고리즘은 다음과 같다.
우선 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;
}
제출한 결과 정답!
'알고리즘' 카테고리의 다른 글
[프로그래머스 > 고득점kit 해시] 베스트 앨범 (C++) (0) | 2021.03.04 |
---|---|
[프로그래머스 > 고득점kit 해시] 위장 (C++) (0) | 2021.02.04 |
[프로그래머스 > 고득점kit 해시] 전화번호 목록 (C++) (0) | 2021.01.21 |
[프로그래머스 > 고득점kit 해시] 완주하지 못한 선수 (C++) (0) | 2021.01.21 |
[백준 15954번] 인형들 (C++) (0) | 2021.01.19 |