https://school.programmers.co.kr/learn/courses/30/lessons/76501?language=python3
def solution(absolutes, signs):
for i, sign in enumerate(signs):
if not sign:
absolutes[i] *= (-1)
return sum(absolutes)
보다 파이썬답게 풀려면 다음과 같이 할 수 있다.
def solution(absolutes, signs):
return sum(abs_num if sign else -abs_num for abs_num, sign in zip(absolutes, signs))
https://school.programmers.co.kr/learn/courses/30/lessons/12977?language=python3
from itertools import combinations
import math
def is_prime(n):
for i in range(2, int(math.sqrt(n))+1):
if n%i==0:
return False
return True
def solution(nums):
answer = 0
for three_nums in combinations(nums,3):
if is_prime(sum(three_nums)):
answer += 1
return answer
위에서 math.sqrt(n)은 n**0.5로 적을 수 있다.
소수를 구하는 가장 빠른 방법은 까지 나눠 떨어지는 수를 체크하는거다.
https://school.programmers.co.kr/learn/courses/30/lessons/67256?language=python3
def distance_cal(x_y_1, x_y_2):
x1, y1 = x_y_1
x2, y2 = x_y_2
return abs(x1-x2) + abs(y1-y2)
def middle_num(L_coord, R_coord, number_coord, hand):
L_distance = distance_cal(L_coord, number_coord)
R_distance = distance_cal(R_coord, number_coord)
if L_distance < R_distance:
return "L"
elif L_distance > R_distance:
return "R"
else:
return "R" if hand == "right" else "L"
# 좌표 위치 저장
def init_coords():
coords = [(0,0)]*10 # 0~9
coords[0]=(3,1)
for i in range(3):
for j in range(3):
coords[3*i+j+1] = (i,j)
return coords
def solution(numbers, hand):
answer = ''
coords = init_coords()
L_coord = (3,0)
R_coord = (3,2)
for number in numbers:
if coords[number][1]==0:
now_dir = "L"
elif coords[number][1]==2:
now_dir = "R"
else:
now_dir = middle_num(L_coord, R_coord, coords[number], hand)
answer += now_dir
if now_dir == "L":
L_coord = coords[number]
else:
R_coord = coords[number]
return answer
coordinate대신 postion이라 하는게 변수명이 깔끔한거같다.(현재위치는 cur_pos으로)
distance는 dist까지만 작성해도 의미전달이 될 듯.
https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=python3
def solution(n, lost, reserve):
lost_uniq = set(lost)-set(reserve)
reserve_uniq = set(reserve) - set(lost)
answer = n - len(lost_uniq) # 없는 사람 제외하면
for lost_per in lost_uniq:
if lost_per-1 in reserve_uniq:
answer += 1
reserve_uniq -= {lost_per-1}
elif lost_per+1 in reserve_uniq:
answer += 1
reserve_uniq -= {lost_per+1}
return answer
첫번째 라인에서 다음과 같이 적고 삽질을 했다. 변수가 갱신되는 점에 주의하자.
lost = set(lost)-set(reserve) # 여기서 lost가 갱신됨
reserve = set(reserve) - set(lost)
나는 체육복이 없는 사람을 기준으로 for문을 돌았는데 여유분이 있는 사람을 기준으로 for문을 돌려도 된다. 이렇게 되면 answer 변수를 안써도 된다.
def solution(n, lost, reserve):
lost_uniq = set(lost)-set(reserve)
reserve_uniq = set(reserve) - set(lost)
for reserve_per in reserve_uniq:
if reserve_per-1 in lost_uniq:
lost_uniq -= {reserve_per-1}
elif reserve_per+1 in lost_uniq:
lost_uniq -= {reserve_per+1}
return n - len(lost_uniq)