반응형
🔺 문제
20546번: 🐜 기적의 매매법 🐜
1월 14일 기준 준현이의 자산이 더 크다면 "BNP"를, 성민이의 자산이 더 크다면 "TIMING"을 출력한다. 둘의 자산이 같다면 "SAMESAME"을 출력한다. 모든 결과 따옴표를 제외하고 출력한다.
www.acmicpc.net
🧩 해결 아이디어
• 구현
- [준현] 그리디를 활용해 남은 현금과 보유 주식 수를 구한다.
- [성민]
- 3일 연속 가격이 전일 대비 상승 시, 그 다음 날에 다 판다. (전량 매수)
- " 하락 시, 그 다음 날에 다 산다. (전량 매도)
- 둘 중 누가 더 높은 수익률을 내는지 계산하고, 비교해 정답을 출력한다.
→ 수익률 계산 : 최종 보유 현금 + 1.14 주가 * 최종 보유 주식 수
💥 유의사항
3일 연속 상승세/하락세인 경우, 3일째 되는 날에 거래를 진행하는 것이 아니라,
그 다음 날인 넷째 날 거래를 체결해야 한다.
🔺 코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] arr = new int[14];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < 14 ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// [준현]
int money1 = N; // 남은 현금
int stock1 = 0; // 보유 주식 수
// 최대한 많이 사 -> 그리디
for(int i = 0 ; i < arr.length ; i++) {
if(money1 / arr[i] > 0) {
int cnt = money1 / arr[i];
stock1 += cnt;
money1 -= arr[i] * cnt;
}
}
// [성민]
int money2 = N; // 남은 현금
int stock2 = 0; // 보유 주식 수
for(int i = 0 ; i < arr.length - 3 ; i++) {
// 3일 연속 가격이 전일 대비 상승한다면, 다 팔아 (전량 매도)
if((arr[i] < arr[i + 1]) && (arr[i + 1] < arr[i + 2])) {
if(stock2 == 0) continue;
money2 += arr[i + 3] * stock2;
stock2 = 0;
}
// 3일 연속 가격이 전일 대비 하락한다면, 즉시 다 사 (전량 매수)
else if((arr[i] > arr[i + 1]) && (arr[i + 1] > arr[i + 2])) {
if(money2 / arr[i + 3] > 0) {
int cnt = money2 / arr[i + 3];
stock2 += cnt;
money2 -= arr[i + 3] * cnt;
}
}
}
// 둘 중 누가 더 높은 수익률 내는지 (보유 현금 + 1.14 주가 * 주식 수)
int profit1 = money1 + arr[arr.length - 1] * stock1;
int profit2 = money2 + arr[arr.length - 1] * stock2;
if(profit1 > profit2) {
System.out.println("BNP");
}
else if(profit1 < profit2) {
System.out.println("TIMING");
}
else {
System.out.println("SAMESAME");
}
}
}
|
cs |
🔺 다른 풀이들
- 객체에 (보유 현금, 보유 주식 수)를 저장해 활용하셨다.
백준 20546 🐜기적의 매매법🐜 (JAVA)
문제 https://www.acmicpc.net/problem/20546 20546번: 🐜 기적의 매매법 🐜 1월 14일 기준 준현이의 자산이 더 크다면 "BNP"를, 성민이의 자산이 더 크다면 "TIMING"을 출력한다. 둘의 자산이 같다면 "SAMESAME"을
goto-pangyo.tistory.com
- 주식이 상승/하락할 때마다 upCnt/DownCnt에 1씩 더하며 상승세인지 하락세인지 파악해 풀기도 하셨다.
백준 20546번 : 기적의 매매법 | 자바 풀이
Solution 문제가 굉장히 길지만,, 원리는 단순하다준현이는 돈이 있으면 무조건 최대한 많이 사고성민이는 3일 연속 오르면 다음날 떨어질 것이라고 생각하고 가지고 있는 걸 모두 팔고,3일 연속
velog.io
💬 느낀 점
더 집중했다면 빨리 풀 수 있었을 것 같다,,
담엔 스탑워치 말고 타이머로 시간 재서 더 빠르게 풀 수 있게 해야지,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1913번: 달팽이 (0) | 2023.12.13 |
---|---|
[백준/JAVA] 4396번: 지뢰 찾기 (0) | 2023.12.13 |
[백준/JAVA] 2800번: 괄호 제거 (0) | 2023.12.09 |
[백준/JAVA] 10799번: 쇠막대기 (0) | 2023.12.08 |
[백준/JAVA] 20002번: 사과나무 (1) | 2023.12.08 |