일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- nginx
- AI
- leetcode
- webpack
- TypeScript
- vuetify
- JavaScript
- type
- docker
- loop
- machine learning
- vue.js
- git
- var
- npm
- dotenv
- property
- 보안
- generic
- BOJ
- VUE
- bash
- condition
- Clone
- C#
- C++
- security
- 앙상블
- scss
- Python
Archives
- Today
- Total
ice rabbit programming
[BOJ] 상금 헌터 본문
2018년 카카오 코드 페스티벌 1번 문제이다. 그냥 if-else로 분기처리하고도 풀 수 있어 난이도는 많이 쉬운 편에 속한다. 이번에 Python으로 다시 풀어보면서 포스팅을 하게 되었다.
문제는 단순하다. 대회 두 번의 등수가 주어지고, 그에 대한 상금 정보를 이용해 총 상금을 구하는 문제이다.
C++
#include <iostream>
using namespace std;
int last(int n) {
if (n == 0 || n>21)
return 0;
else if (n == 1)
return 5000000;
else if (n > 1 && n <= 3)
return 3000000;
else if (n > 3 && n <= 6)
return 2000000;
else if (n > 6 && n <= 10)
return 500000;
else if (n > 10 && n <= 15)
return 300000;
else if (n > 15 && n <= 21)
return 100000;
}
int present(int n) {
if (n == 0 || n>31)
return 0;
else if (n == 1)
return 5120000;
else if (n > 1 && n <= 3)
return 2560000;
else if (n > 3 && n <= 7)
return 1280000;
else if (n > 7 && n <= 15)
return 640000;
else if (n > 15 && n <= 31)
return 320000;
}
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int T = 0;
cin >> T;
while (T--) {
int a = 0, b = 0;
cin >> a >> b;
cout << last(a) + present(b) << endl;
}
return 0;
}
이런 식으로 그냥 로직을 하드코딩해도 풀 수 있다. 1년 전에 풀었던 코드인데 그나마 함수로는 만들어 두었다..
Python
T = int(input())
a_money = {1:5000000, 2:3000000, 3:2000000, 4:500000, 5:300000, 6:100000}
b_money = {1:5120000, 2:2560000, 3:1280000, 4:640000, 5:320000}
for test_case in range(T):
a, b = map(int, input().split())
result = 0
if a > 0:
a_place = 0
for index in range(1,7):
a_place += index
if a_place >= a:
result += a_money[index]
break
if b > 0:
b_place = 0
for index in range(1,6):
b_place += 2 ** (index-1)
if b_place >= b:
result += b_money[index]
break
print(result)
위처럼 단순하게 풀어도 되겠지만, 조금 더 제너럴하고 간결하게 풀고 싶어서 첫 대회와 두 번째 대회의 인원 증가의 패턴을 이용하여 반복문을 사용했다. 또한 switch-case문이 python에는 없지만 dict를 이용해 비슷하게 동작하도록 하였다. 풀고나서 보니 하나의 함수로 만들고 function delegate를 받게 처리해도 되었을 것 같다.
'PS > BOJ' 카테고리의 다른 글
[BOJ] 비밀번호 찾기 (0) | 2020.09.06 |
---|---|
[BOJ] Sort 마스터 배지훈 (0) | 2020.04.18 |