코딩테스트/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을 해주면 끝!