Open robert-min opened 1 month ago
https://school.programmers.co.kr/learn/courses/30/lessons/181187
import math
def solution(r1, r2):
answer = 0
for i in range(1,r2): #x가 정수일때 y가 정수인 점을 탐색
y2 = math.floor(math.sqrt(math.pow(r2,2) - math.pow(i,2)))
if i >= r1: #x값이 r1과 r2사이인 경우
y1 = 0
else: #x값이 r1보다 작은 경우
y1 = math.ceil(math.sqrt(math.pow(r1,2) - math.pow(i,2)))
answer += y2-y1+1
if i >= r1: #계산의 편의를 위해 y가 0인 x축위의 점들은 제외
answer -= 1
answer += r2-r1+1 #x축 위에있는 점
answer *= 4
return answer
시간초과 풀이
x2 + y2 = r2 모든 좌표 경우 탐색 시
def solution(r1, r2):
"""
Return 두 원 사이에 x,좌표 y좌표가 모두 정수인 점
x, y의 제곱의 합이 r1의 제곱보다 크거나 같고, r2의 제곱보다 작거나 같으면 가능한 좌표
모든 좌표 탐색
x2 + y2 <= r2
1, 1 >> 2 X < 4
2, 2 >> 8
3, 0 >> 9 O
3, 3 >> 18 X
2, 3 >> 4+9 13 X
"""
points = [i for i in range(0, r2+1)]
# print(points)
s_area = r1 ** 2
l_area = r2 ** 2
answer = 0
ck = 0
for x in points:
for y in points:
if x < r1 and y < r1:
continue
if s_area <= x ** 2 + y ** 2 <= l_area:
answer += 1
if x == 0 or y == 0:
ck += 1
# print(answer)
# print(ck)
temp = (answer - ck) * 4 + ck * 2
return temp
.index가 시간초과 될경우 dict 활용
def solution(players, callings):
"""
Return : 최종 순위 선수이름
- calling될 때, 해당 선수 index 변경
[i-1] [i] 변경
"""
ranking = dict()
for idx, player in enumerate(players):
ranking[player] = idx
for name in callings:
idx = ranking[name]
players[idx-1], players[idx] = players[idx], players[idx-1]
ranking[players[idx-1]], ranking[players[idx]] = ranking[players[idx]], ranking[players[idx-1]]
return players
연습문제 -요격시스템
https://school.programmers.co.kr/learn/courses/30/lessons/181188