[TIL #29] 점 찍기

2024. 10. 25. 19:04·Camp/T.I.L.

https://school.programmers.co.kr/learn/courses/30/lessons/140107

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

변의 길이가 ``d``인 정사각형에 ``k``의 간격으로 점을 찍는 문제.

 

최초 접근은 피타고라스 정리를 매 사이클마다 계산하지 않고 $\sqrt{2} ≒ 1.414...$를 활용하려고 했다.

이러면 숫자가 커질수록 발생하는 오차를 말끔히 해결할 수 없다는 걸 깨닫고 선회.

 

다음 방법은 이것.

function solution(k, d) {
    let count = 0;
    const dSquared = d * d;

    // x를 0부터 d까지 k 단위로 순회
    for (let x = 0; x <= d; x += k) {
        // yMax^2 <= d^2 - x^2
        const yMaxSquared = dSquared - (x * x);

        // y의 최대값을 k 단위로 조정
        const yMax = Math.floor(Math.sqrt(yMaxSquared) / k) * k;

        // y가 0부터 yMax까지 k 단위로 증가하는 경우의 수를 더함
        count += (yMax / k) + 1;
    }

    return count;
}

코드가 심플하고 효율이 꽤 괜찮다.

피타고라스를 사용해야 하는 점이 아쉽지만 어쩔 수 없는 것 같다.

 

결과 카운팅에 ``(0, 0)``이 포함된다는 점과, 피타고라스 정리를 사용해야 한다는 점만 떠올리면 간단한 문제.

좌표 평면의 점에 대하여 영역을 계산한다던가 회전한다던가 그런 것만 해봤었는데,

간단해 보이는 유형이라 뭔가 함정이 있지 않나 고민을 좀 했었던 것 같다.

 

이제 보니 이거 레벨 2다...

함정도 없었는데...

대체 왜?

'Camp > T.I.L.' 카테고리의 다른 글

[TIL #31] 상태 업데이트의 벽  (0) 2024.10.31
[TIL #30] 모의 면접을 준비하며  (0) 2024.10.30
[TIL #28] Investments in 2016  (0) 2024.10.23
[TIL #27] 호텔 대실  (0) 2024.10.21
[TIL #26] 함수 오버로딩의 함정  (0) 2024.10.18
'Camp/T.I.L.' 카테고리의 다른 글
  • [TIL #31] 상태 업데이트의 벽
  • [TIL #30] 모의 면접을 준비하며
  • [TIL #28] Investments in 2016
  • [TIL #27] 호텔 대실
BVM
BVM
  • BVM
    E:\
    BVM
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Thoughts (14)
      • Study (69)
        • Japanese (3)
        • C++ & C# (46)
        • Javascript (3)
        • Python (14)
        • Others (3)
      • Play (1)
        • Battlefield (1)
      • Others (11)
      • Camp (73)
        • T.I.L. (57)
        • Temp (1)
        • Standard (10)
        • Challenge (3)
        • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 본 블로그 개설의 목적
  • 인기 글

  • 태그

    cloudtype
    프로그래머스
    클라우드
    discord
    네트워크
    IOCP
    docker
    C++
    FF14
    로깅
    암호화
    베데스다
    Dalamud
    bot
    Network
    discord py
    c#
    Asio
    네트워크 프로그래밍
    JS
    서버
    Python
    포인터
    7계층
    OSI
    Server
    스타필드
    db
    Selenium
    boost
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
BVM
[TIL #29] 점 찍기
상단으로

티스토리툴바