일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- build
- 컴퓨터비전
- Python
- BFS
- MSBuild
- 내휴학생활중의아주큰일
- Github
- 어렵다
- LEVEL2
- level1
- 파이썬
- 대학원일기
- D3
- 안드로이드스튜디오
- git
- 다시풀기
- java
- WebOS
- 자바
- 프로그래머스
- SQL
- 컨트리뷰톤
- level3
- py
- SWEA
- androidstudio
- level4
- 휴학
- Matrix Factorization
- 대학원
Archives
- Today
- Total
bit가 눈 앞에서 왔다갔다
Py) SWEA 1859 백만장자 프로젝트 본문
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc
1차 시도: (제한 시간 30분) 못풀었음
2차 시도: 6분
0. 입출력
1. 김예고리즘
1-1. 알고리즘
if문, 반복문 쓰는 방법을 생각했다.
1) 현재 수가 앞날보다 크고 뒷날보다 크다면 판매, 뒷날보다 작다면 판매 금지
2) 앞날보다 작고 뒷날 큰게 없다면 return 0
3) 수가 모두 동일한데 뒷날 더 큰게 있다면 구입, 뒷날 더 작은거 직전에 팔기
뭐 이런식으로.
수익은 "제일 비싼 날*총 구매량 - 수익은 이제까지 지난 날들 합" 이라고 설정해뒀다.
1-2. 코드
풀다 말았다.
2. Solution
2-1. 사용 자료구조 및 알고리즘: x
2-2. 로직
1) 맨 뒷 수를 값이 가장 비싼 날(max)로 일단 설정한다.
2) 뒤에서 부터 앞으로 가격을 비교하는데,
2-1) max보다 크다면 max값을 변경한다
2-2) max보다 작거나 같다면 수익 += max - 현재가격 이다.
2-3. 코드
case = int(input())
for tc in range(case):
N = int(input()) # 날 수
arr = list(map(int, input().split()))
max = arr[-1] # 제일 끝값이 max값이라 설정
profit = 0
for now in range(N-2, -1, -1):
if arr[now] >= max:
max = arr[now] # 최대값 변경
else:
profit += max - arr[now]
print('#{} {}'.format(tc+1, profit))
3. 피드백
1) 그동안 프로그래머스를 많이 사용해서 저런 식의 input 값을 파이썬으로 저렇게 받아본 적이 딱히 없었음.
arr = list(map(int, input().split()))
list를 적어주지 않아서 좀 해맴
2) range 빼먹음
-> 당연히 int는 iteratable하지 않다고 잔소리..
for tc in range(case):
3) 출력 저렇게 하는 건지 몰랐다. 외우자
4. 오늘의 외울거리
* 입력
case = int(input())
for tc in range(case):
N = int(input()) # 날 수
arr = list(map(int, input().split()))
* 출력
print('#{} {}'.format(tc+1, profit))
반응형
'Algorithm > Prob' 카테고리의 다른 글
Py) SWEA 14178 1차원 정원 (0) | 2022.11.05 |
---|---|
Py) SWEA 2007 패턴 마디의 길이 (0) | 2022.11.03 |
Py) 프로그래머스 77484 로또의 최고 순위와 최저 순위 (0) | 2022.07.16 |
Py) 프로그래머스 77485 행렬 테두리 회전하기 (0) | 2022.07.14 |
Py) 72411 메뉴 리뉴얼 (0) | 2022.07.07 |
Comments