Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 호반우 상인
- LIS #가장긴증가하는부분수열 #
- c++ #boj #
- 레드아보
- 코딩
- 투포인터 #백준 #boj #20922 #22862
- BOJ
- 백준 #다익스트라 #dijkstra #9370 #c++
- C++
- boj #백준
- graph #최단경로
- 이분탐색 #dp #11053
- 3343
- N번째큰수
- hcpc
- 30870
- 줄어드는수
- backtracking #codetree #디버깅 #삼성코테
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- 20117
- 16202
- 백준
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- graph
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 사이클 없는 그래프
- 1174
- 쌤쌤쌤
- 22869
Archives
- Today
- Total
hyunjin
[C++][BOJ11501] 그리디 알고리즘 본문
728x90
딱 보고 바로 떠오르진 않았다.
silver3으로 난이도는 낮은 문제
문제 풀이
중요한 포인트는
i 번째 기준 i+1~마지막 중 max 값에서 팔면 최대라는 것이다.
이점을 이용해 풀어야하고 앞에서 부터 시작하면 i 마다 max가 달라지고
그 위치도 찾아줘야하기 때문에 복잡하다. 뒤에서 부터 시작해 max를 찾아 계산해주면 금방 풀린다.
시간 초과
#include <iostream>
using namespace std;
int main(){
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
int answer = 0 ;
int profit[N]={0,}; // 주식 판 이익
int stockPrice[N]={0,};//주식 가격
for(int i = 0 ; i < N;i++){ //시간 O(n)
scanf("%d",&stockPrice[i]);
}
for(int i = N-1; i >=0 ;i--){
for(int j = i-1 ; j>=0;j--){
profit[j] = (profit[j] < stockPrice[i] - stockPrice[j] ) ?stockPrice[i] - stockPrice[j] : profit[j];
}
}
for(int i = 0 ; i <N;i++) answer += profit[i];
printf("%d\n",answer);
}
}
이중 for문 때문에 시간 초과 나올것 같았지만 그래도 일단 풀어서 흐름 파악 해봤다.
정답 소스코드
#include <iostream>
using namespace std;
typedef long long ll;
int main(){
int T,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
int stockPrice[N]={0,};
for(int i = 0 ; i < N; i++){
scanf("%d",&stockPrice[i]);
}
int maxPrice = 0;
ll answer = 0 ;
for(int i = N-1; i >=0 ;i--){
maxPrice = (maxPrice < stockPrice[i]) ? stockPrice[i] : maxPrice;
answer += (maxPrice - stockPrice[i]);
}
printf("%lld\n",answer);
}
}
시간 복잡도 O(n)
어차피 for문 한번 쫙 돌기 때문에
맞길 바란다.
주의할점
제발 자료형 까먹지 말고, 출력할 때도 좀
마지막 printf에서 %lld로 안해서 몇번을 채점했다....
참고
https://travelbeeee.tistory.com/15
728x90
'알고리즘 연습 > 백준' 카테고리의 다른 글
[C++][BOJ 11497/통나무 건너뛰기] 그리디, 정렬 (0) | 2021.07.19 |
---|---|
[C++][BOJ1541-잃어버린 괄호] 그리디,파싱,문자열,수학 (0) | 2021.07.10 |
[C++][BOJ17248] ceil 소숫점 올림 (0) | 2021.07.01 |
[C++][BOJ/DFS와 BFS/1260] fill, memset (0) | 2021.02.18 |
[C++][BOJ-소수 관련1978,] 소수찾기, 소인수분해 (0) | 2021.02.17 |