티스토리 뷰
링크: https://school.programmers.co.kr/learn/courses/30/lessons/12987
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
## Problem
최대로 이길 수 있는 수를 출력하면 된다.
그리디라고 생각했다.
하나를 정렬하고 비교해가면 될거라 생각함
## Solved
def solution(A, B):
answer = 0
A.sort(reverse = True)
B.sort(reverse = True)
for num in A:
if num >= B[0]:
continue
else:
answer += 1
del B[0]
return answer
테스트 1 〉 통과 (698.52ms, 18.3MB)
테스트 2 〉 통과 (665.34ms, 18.3MB)
테스트 3 〉 통과 (629.17ms, 18.1MB)
정리전 코드. 일단, 풀고나서 보니
- continue 가 필요없을 것 같음
- del 도 효율적이지 않은 사용으로 보였다.
## 변경 후
def solution(A, B):
answer = 0
A.sort(reverse = True)
B.sort(reverse = True)
i = 0
for num in A:
if num < B[i]:
answer += 1
i += 1
return answer
테스트 1 〉 통과 (40.12ms, 18.5MB)
테스트 2 〉 통과 (38.96ms, 18.1MB)
테스트 3 〉 통과 (42.68ms, 18.2MB)
오우 del 을 변경하니 시간이 확 줄었다.
알게된 점
for loop 을 사용할 때 for each 가 나을지, for loop 가 나을지 궁금해졌다.
https://betterprogramming.pub/python-loops-performance-compared-the-fastest-is-b4638744a1ff
Python Loops Performance Compared: The Fastest Is…
Deeply analyzing Python for-each, for-range, and while loops to find the best one
betterprogramming.pub
Python 의 경우 While 보다 For 를 사용하면 FOR_ITER
라는 바이트코드가 제공되어 훨씬 적은 바이트코드수를 사용함을 알 수 있었다.
For-range와 For-each 도 크게 차이 안나나, range call function이 호출되다보니 for each 가 조금 더 효율이 좋아보였다.
For-range loop
# For-range loop
import dis
def loop():
arr = [1,2,3,4,5]
for i in range(5):
print(arr[i])
..
..
12 STORE_FAST 0 (arr)
5 14 SETUP_LOOP 32 (to 48)
16 LOAD_GLOBAL 0 (range)
18 LOAD_GLOBAL 1 (len)
20 LOAD_FAST 0 (arr)
22 CALL_FUNCTION 1
24 CALL_FUNCTION 1
26 GET_ITER
>> 28 FOR_ITER 16 (to 46)
30 STORE_FAST 1 (i)
6 32 LOAD_GLOBAL 2 (print)
34 LOAD_FAST 0 (arr)
36 LOAD_FAST 1 (i)
38 BINARY_SUBSCR
40 CALL_FUNCTION 1
42 POP_TOP
44 JUMP_ABSOLUTE 28
>> 46 POP_BLOCK
>> 48 LOAD_CONST 0 (None)
50 RETURN_VALUE
For-each loop
# For-each loop
import dis
def each():
arr = [1,2,3,4,5]
for i in arr:
print(i)
..
..
10 BUILD_LIST 5
12 STORE_FAST 0 (arr)
11 14 SETUP_LOOP 20 (to 36)
16 LOAD_FAST 0 (arr)
18 GET_ITER
>> 20 FOR_ITER 12 (to 34)
22 STORE_FAST 1 (i)
12 24 LOAD_GLOBAL 0 (print)
26 LOAD_FAST 1 (i)
28 CALL_FUNCTION 1
30 POP_TOP
32 JUMP_ABSOLUTE 20
>> 34 POP_BLOCK
>> 36 LOAD_CONST 0 (None)
38 RETURN_VALUE
'Algorithm > problems' 카테고리의 다른 글
백준, 안전영역 (Python) (0) | 2024.02.09 |
---|---|
프로그래머스, 문자열 나누기 (Python) (0) | 2023.06.26 |
프로그래머스, 개인정보 수집 유효기간 (Python) (0) | 2023.06.21 |
프로그래머스, 크레인 인형뽑기 게임 (Python) (0) | 2023.06.19 |
프로그래머스, 징검다리 건너기 (Python) (0) | 2023.06.17 |
- Total
- Today
- Yesterday
- 이더넷프로토콜
- 54. spiral matrix
- leetcode 17. letter combinations of a phone number
- leetcode
- 네트워크정의
- leetcode 54. spiral matrix
- 알고리즘
- 광역망
- 블루/그린
- 프로그래머스
- 클래스리스주소체계
- letter case permutation
- 네트워크성능평가
- Algorithm
- leetcode 295
- leetcode334
- 네트워크처리율
- 이더넷이란
- 인터넷프로토콜이란
- 네트워크허브
- arp응답
- 테라폼구축
- 네트워크패킷로스
- leetcode 295. find median from data stream
- 이더넷뜻
- 122. best time to buy and sell stock ii
- 클래스풀주소체계
- 네트워크분류
- increasing-triplet-subsequence
- 롤링업데이트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |