sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mariadb
  • Android Studio
  • spring boot
  • 백준
  • 티스토리챌린지
  • 레벨2
  • 연습문제
  • 오블완
  • 레벨3
  • docker
  • nginx
  • 프로그래머스
  • DB
  • 알고리즘
  • 고득점KIT
  • java
  • 안드로이드 스튜디오
  • kotlin
  • 고득점 Kit
  • JPA

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

프로그래머스 :: 연습문제 :: 점찍기

2022. 12. 5. 00:01
728x90

풀이

import kotlin.math.*

class 점찍기 {
    fun solution(k: Int, d: Int): Long {

        var count = 0L

        val dPowered = power(d)

        for(x in (0 .. d step k)){
            count += getMaxYCoordinatesCounts(dPowered-power(x), k)
        }

        return count
    }

    /**
     * 설명
     * - Math 패키지를 사용하고 싶지 않아서 만든 Math.pow 대체 함수
     * - 문제에서 d 를 제곱하면 int 의 범위를 넘어감으로 Long 으로 반환하게끔 구현
     *
     * 주의사항
     * - `틀리게 된 함수` 사용시 `number * number`의 연산이 먼저 일어남으로 int 의 범위를 넘어가게되면 음수가 되게된다.
     * -- ex) `51_000 * 51_000 = 2_601_000_000` 는 int 의 범위를 넘어감으로 `..= -1_693_967_296` 임으로 계산 오류 나게됨
     * */
    private fun power(number: Int): Long{
        // 틀리게 된 함수
//        return (number * number).toLong()
        return (number.toLong() * number.toLong())
    }

    private fun getMaxYCoordinatesCounts(beforeScaledNumber: Long, k: Int): Int{
        /**
         * 설명
         * - x 좌표에 따르는 y 좌표의 갯수를 반환한다.
         *
         * Parameter
         * - sqrtOfMaxYCoordinate : d 를 기준으로 원을 그렸을때 좌표 평면에서 가질수 있는 Y 의 최댓값(Double) 값
         * - dropUnderDecimalPoint : 양의 정수를 고려하고 있음으로, 필요없는 소수점 버림
         * - getScaleMaxY : 제일큰 y 값 보다 작지만 k 의 배수중 가장 높은 값
         * - plusOneBecauseNotCountZero : k 개로 나누면 갯수가 추출되지만, 0은 count 안됨으로 +1 한 값
         * */

//        return Math.floorDiv(floor(sqrt(beforeScaledNumber.toDouble())).toInt(), k).times(k)
        val sqrtOfMaxYCoordinate = sqrt(beforeScaledNumber.toDouble())
        val dropUnderDecimalPoint = floor(sqrtOfMaxYCoordinate)
        val getScaledMaxY = Math.floorDiv(dropUnderDecimalPoint.toInt(), k).times(k)
        val plusOneBecauseNotCountZero = getScaledMaxY.div(k).plus(1)

        return plusOneBecauseNotCountZero
    }

    /**
     * 설명
     * - 11, 12, 14 시간 초과된 로직
     * - 2중 for 문 사용시 시간 초과된다.
     * */
//    fun solution(k: Int, d: Int): Long {
//
//        var count = 0L
//
//        val dPowered = power(d.toLong())
//
//        var y = 0L
//        var x = 0L
//
//        var singleTaskCount = 0L
//
//        while(true){
//
//
//            val yPowered = power(y)
//
//            if(power(x).plus(power(y)) > dPowered){
//                break
//            }
//
//            while(true){
//
//                val xPowered = power(x)
//
//                if(xPowered.plus(yPowered) <= dPowered){
//                    singleTaskCount += 1
//                    x += k
//                }
//                else{
//                    count += singleTaskCount * 2 - 1
//                    singleTaskCount = 0L
//                    y += k
//                    x = y
//                    break
//                }
//            }
//        }
//
//        return count
//    }
}

출처

 

프로그래머스

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

programmers.co.kr


풀이(github)

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

프로그래머스 :: 연습문제 :: 테이블 해시 함수  (0) 2022.12.25
프로그래머스 :: 연습문제 :: 혼자 놀기의 달인  (0) 2022.12.12
프로그래머스 :: 연습문제 :: 귤고르기  (0) 2022.11.25
프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수  (0) 2022.11.18
프로그래머스 :: 연습문제 :: 숫자 카드 나누기  (0) 2022.11.11
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스 :: 연습문제 :: 테이블 해시 함수
    • 프로그래머스 :: 연습문제 :: 혼자 놀기의 달인
    • 프로그래머스 :: 연습문제 :: 귤고르기
    • 프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바