코딩테스트/SWEA
[Python, 파이썬] SWEA 16910. 원 안의 점
알코딩
2024. 11. 10. 13:34
x2+y2<=N2인 격자점의 개수를 구하는 문제.
T = int(input()) # 테스트케이스의 개수 T
for test_case in range(1, T+1):
N = int(input()) # 정수 N
answer_0 = 0 # 0이 들어간 정답 개수
answer_not0 = 0 # 0이 들어가지 않은 정답 개수
for i in range(N, -1, -1): # N ~ 0까지 역으로
for j in range(N+1): # 0 ~ N까지 역으로
if(pow(i, 2)+pow(j, 2) <= pow(N, 2)): # 격자점이면
if(i and j):
answer_not0 += 1 # 0이 없는 개수 count
else:
answer_0 += 1 # 0이 있는 개수 count
answer = (answer_0-1)*2+1 + (answer_not0*4) # 최종 정답 개수
print("#%d %d" % (test_case, answer))
[문제풀이]
예) N이 10일 때
3 4
3 -4
-3 4
-3 -4
예를 들면 N이 10이라 할때, 구한 x, y 좌표 (3, 4)의 경우는 음수를 고려해서 이렇게 총 4개가 나온다.
반대로 0이 하나라도 포함된 쌍은 이렇게 2개.
3 0
-3 0
그리고 마지막 (0, 0)은 오로지 1개 뿐이다.
그래서 x, y의 좌표를 각각 0 ~ N까지 각각 돌려서, 0이 하나라도 나온 개수, 아닌 개수를 따로 세줬다.
if(pow(i, 2)+pow(j, 2) <= pow(N, 2)): # 격자점이면
if(i and j):
answer_not0 += 1 # 0이 없는 개수 count
else:
answer_0 += 1 # 0이 있는 개수 count
그런 후 최종 정답 개수를 세줬다.
answer = (answer_0-1)*2+1 + (answer_not0*4) # 최종 정답 개수
0이 안나온 개수는 총 4개 조합이 발생할 수 있으므로 *4.
그리고 0이 나온 개수는 (0, 0) 이 조합을 위해 -1을 해주고, 거기에 2를 곱해줘서 조합을 구한다.
그 후 최종적으로 (0, 0)을 위해 +1을 해주면 끝!