2022.06.26
프로그래머스 Lv.1 쉬운 문제들 피드백 모음 (1)
'없는 숫자 더하기' 문제
나의 답안
def solution(numbers):
num = [1,2,3,4,5,6,7,8,9,0]
answer = 0
for i in num:
if i not in numbers:
answer += i
return answer
모범 답안
def solution(numbers):
return 45 - sum(numbers)
너무나 간결한 코드..
왜 이렇게는 생각을 못했을까?
'내적' 문제
나의 답안
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += a[i]*b[i]
return answer
모범 답안
def solution(a, b):
return sum([a*b for a, b in zip(a, b)])
- zip(x, y) : 두 그룹의 데이터를 순서대로 엮어줌. 만약 인자의 길이가 다르면 더 긴 그룹의 나머지 인자들은 버려짐.
'실패율' 문제
나의 답안
import collections
def solution(N, stages):
all_player = len(stages)
stage_player = collections.Counter(stages)
fault = dict()
for i in range(1, N+1):
if i in stage_player:
fault[i] = stage_player[i]/all_player
all_player -= stage_player[i]
else:
fault[i] = 0
answer, delete = [], []
while(len(fault) != 0):
fault_max = max(fault.values())
for i in fault.keys():
if fault[i] == fault_max:
delete.append(i)
answer.append(i)
for j in delete:
del fault[j]
delete = []
return answer
모범 답안
import collections
def solution(N, stages):
all_player = len(stages)
stage_player = collections.Counter(stages)
fault = dict()
for i in range(1, N+1):
if i in stage_player:
fault[i] = stage_player[i]/all_player
all_player -= stage_player[i]
else:
fault[i] = 0
return sorted(fault, key=fault.get, reverse=True)
- sorted(x, key=x.get, reverse=True) : x를 내림차순으로 정렬하여 그의 key 값만 출력해줌.
'3진법 뒤집기' 문제
나의 답안
def solution(n):
if n == 0:
return 0
trans = []
while (3**len(trans) <= n):
trans.append(0)
for i in range(len(trans)-1, -1, -1):
if n >= (3**i)*2:
trans[i] = 2
n = n - (3**i)*2
elif n >= (3**i)*1:
trans[i] = 1
n = n - (3**i)*1
answer = 0
for i, j in enumerate(trans):
answer += j*3**(len(trans)-1-i)
return answer
- for i, j in enumerate(x) : list x를 i = 원소 번호, j = 원소 값 순으로 출력해줌.
모범 답안
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
- int(x, 3) : 3진법으로 쓰여진 숫자 x를 10진법으로 변환해서 출력해줌.
'최소직사각형' 문제
나의 답안
def solution(sizes):
w, h = [], []
max_w, max_h = 0, 0
for i in sizes:
w.append(i[0])
h.append(i[1])
if i[0] > max_w:
max_w = i[0]
min_h = i[1]
if i[1] > max_h:
max_h = i[1]
min_w = i[0]
if max_w >= max_h:
while True:
max_h = max(h)
if min_h >= max_h:
return max_w*min_h
for i in range(len(h)):
if max_h == h[i]:
if w[i] >= h[i]:
return max_w*h[i]
else:
if w[i] > min_h:
min_h = w[i]
h[i] = 0
else:
h[i] = 0
else:
while True:
max_w = max(w)
if min_w >= max_w:
return max_h*min_w
for i in range(len(w)):
if max_w == w[i]:
if h[i] >= w[i]:
return max_h*w[i]
else:
if h[i] > min_w:
min_w = h[i]
w[i] = 0
else:
w[i] = 0
모범 답안
def solution(sizes):
return max(max(x) for x in sizes) * max(min(x) for x in sizes)
'코딩테스트' 카테고리의 다른 글
[코딩테스트 - Python] 프로그래머스 Lv.1 문제 피드백 모음 (3) (0) | 2022.07.01 |
---|---|
[코딩테스트, Python] 프로그래머스 Lv.1 쉬운 문제들 피드백 모음 (2) (0) | 2022.06.27 |
[코딩테스트, Python] 프로그래머스 '소수 만들기' 문제 피드백 (0) | 2022.06.25 |
[코딩테스트, Python] 프로그래머스 '완주하지 못한 선수' 문제 피드백 (Feat. Hash Table) (0) | 2022.06.24 |
[코딩테스트, Python] 프로그래머스 '신규 아이디 추천' 문제 피드백 (0) | 2022.06.24 |