greenhelix
greenhelix
greenhelix
06-22 17:07
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#38_Code Signal Arcade >> Growing Plant
Algorithm/Java

#38_Code Signal Arcade >> Growing Plant

2020. 3. 5. 00:00

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \


Growing Plant 

자라는 식물?

식물이 있는데,, 낮에는 upSpeed만큼 크고, 밤에는 downSpeed만큼 작아집니다. 

목표치? 최대 자라는 맥시멈이 desiredHeight인데요. 

그 목표치까지 도달하기까지 총 몇일 이 걸리는지 물어보는 문제내요. 

예시의 표를 보면 좀 이해가 됩니다. 

 

답안을 볼까요 

int growingPlant(int upSpeed, int downSpeed, int desiredHeight) {

    int growth = upSpeed ;  // 초기 성장값. 
    int not = upSpeed - downSpeed; // 성장 차이값.
    int count = 1;  // 일 수. 
    int i = 1; 
    if(growth > desiredHeight){return count;}
    for(; ;i++ ){
        growth =  i*not + upSpeed;        
        if(desiredHeight <= growth){count = i+1; break;}      
    } 
    return count; 
}

int growth = upSpeed ;  // 초기 성장값. 
int not = upSpeed - downSpeed; // 성장 차이값.
int count = 1;  // 일 수. 
int i = 1;

저는 일단 초기 값이 0인것을 고려하여 바로 upSpeed값을 growth에 넣어주었습니다. 

그리고 not이라는 변수를 선언해서 차이값.. 즉 하루에 최종적으로 자라는 값을 만들어 주었습니다. 

그리고 count 를 통해 일 수를 체크하려 선언을 하고.. int i는.... 필요해서 선언하거 같네요. 

 

if(growth > desiredHeight){return count;}
    for(; ;i++ ){
        growth =  i*not + upSpeed;        
        if(desiredHeight <= growth){count = i+1; break;}      
    } 
    return count; 

다음은 반복문을 통해 계산했습니다. 

일단 애초부터 첫 성장때 목표치를 넘게 되면 하루니깐 그냥 count = 1값을 리턴해주기로 하고요.. 아마 테스트하다가

그지같은 경우가 있어서 추가한 듯 하네요.. 

그리고 반복문을 통해서 upSpeed + i*성장차이값을 하여 growth 에 넣어줍니다. 

그리고 조건문을 통해서 growth가 desiredHeight보다 커지거나 같아지면 count에 해당 i와 +1를 하여 일수를 넣어주고 반복문을 빠져나와서 리턴 시킵니다.  더 간단하게 할수도 있을 듯 한데 , 귀찮네요.. 아무튼... ㅋㅋ


내 구린 코드는 제쳐두고... 

 

이제 엘리트 분들의 답안을 감상하자... 

JAVA

int growingPlant(int upSpeed, int downSpeed, int desiredHeight)
{
    // The height after x days (up - down) * (x - 1) + up
    // We want dh <= (u - d) * (x - 1) + u
    // (dh - u) / (u - d) + 1 <= x
    return Math.max(0, (int) Math.ceil((double) (desiredHeight - upSpeed) / (upSpeed - downSpeed))) + 1;
}

뭔가 수학적이네요.. 아무튼 영롱한 한줄짜리입니다... double형으로 형변환하여 저 공식??? 을 박아준뒤, ceil이라는 올림값 처리를 하여 땡겨준뒤,,, max를 또 써까지고,,, 리턴되게 하는거네요.. 영롱합니다. 알고싶지도 않아요. 공식을 어캐 만든는 건지 항

 

Python3

def growingPlant(upSpeed, downSpeed, desiredHeight):
    if desiredHeight <= upSpeed:
        return 1
    return math.ceil((desiredHeight - upSpeed) / (upSpeed - downSpeed) + 1)

파이썬도 비슷한 공식을 썻네요.. 나만 모르는건가..

JS

function growingPlant(upSpeed, downSpeed, desiredHeight) {
    return upSpeed > desiredHeight ? 1 : Math.ceil((desiredHeight - upSpeed) / (upSpeed - downSpeed)) + 1;
}

자바스크립트 역시... 한줄짜리. 비슷한 공식 사용... 

 

 

공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!

부탁드려요 돈드는거 아니잖아요~

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

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

#39_Code Signal Arcade >> Knapsack Light  (0) 2020.03.06
#37_Code Signal Arcade >> Array Max Consecutive Sum  (0) 2020.03.04
#36_Code Signal Arcade >> Different Symbols Naive  (0) 2020.02.23
    'Algorithm/Java' 카테고리의 다른 글
    • #40_Code Signal Arcade >> Longest Digits Prefix
    • #39_Code Signal Arcade >> Knapsack Light
    • #37_Code Signal Arcade >> Array Max Consecutive Sum
    • #36_Code Signal Arcade >> Different Symbols Naive
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바