최대 1 분 소요

사용 언어: Python3

문제

점 찍기

풀이

나의 풀이

import sys
sys.setrecursionlimit(10**6)

def solution(k, d):
    global cnt
    
    # (0, 0) ~ (x1, y1) 거리
    def calcDist(x1, y1):
        return (x1**2+y1**2)**(1/2)
        
    dx, dy = [k, k, 0], [0, k, k]
    def DFS(x, y):
        print(x, y)
        visited.append((x, y))
        for w in range(3):
            xx, yy = x+dx[w], y+dy[w]
            if calcDist(xx, yy) > d:
                continue
            if (xx, yy) in visited:
                continue
            DFS(xx, yy)
        
    visited = [] # 찍은 점의 좌표
    DFS(0, 0)
    
    return len(visited)
  • 테스트 케이스: 통과
  • 제출 결과: 런타임에러

다른 풀이

def solution(k, d):
    cnt = 0
    for x in range(0, d+1, k): # ✅ x좌표 순회하면서
        # ✅ y좌표 몇 개 찍을 수 있는지
        # x**2 + y**2 <= d**2 이니까 y <= sqrt(d**2 - x**2) 여야 한다
        y_max = int((d**2 - x**2)**0.5)
        # y_max에서 소수점 제거 후 k로 나누어 몇 개 찍을 수 있는지 계산 (+1은 x축에 붙어있는 점까지 포함하기 위해)
        cnt += y_max // k + 1
    return cnt
  • 테스트 케이스: 통과
  • 제출 결과: 통과

IMG_0469



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기