namin2ya   2년 전

아래와 같은 소스로 문제를 풀게 되었습니다.

버퍼를 사용하는 방법이 있지만 버퍼는 아직 익숙하지 않고, 미숙한 점이 많아 조금 더 공부하고 사용하려고 합니다.

그래서 스캐너를 사용해서 문제를 푸는 방법에 대해서 알아보고자 반복문을 사용하지 않고 문제를 풀었는데,

다음과 같은 소스로 도출이 되었습니다. 정말 너무 궁금해서 다른 답안 소스코드를 확인해 보았는데, 제 소스코드와 별반 차이가 없어서 질문 드리게 되었습니다.

djm03178   2년 전

Java 8로 제출하면 여유있는 것 같습니다.

Java 11의 Scanner가 생성하는 것이 느린가 봅니다.

namin2ya   2년 전

 그치만... java 11밖에 제출 할 수 없는 상황인게 함정인거 같습니다.

이번 문제는 그냥 넘어가도록 해야겠습니다! 감사합니다.

kkdky1   2년 전

스캐너가 느린거 같네요 

식이 어떻게 v-b로 시작해서 성립하는지 이해가 않가네요 ㅠㅠ

v-a로 풀었는데;

a만큼 낮에 무조건 올라가니  v-a를 한후에  a-b로 나눈후 나머지가 있다면 이값에 1을 증가해서 풀었는데 

어떻게 푸셨는지 궁굼합니다

int day = 1+(v-a)/(a-b);
if((v-a)%(a-b)!=0) {
day++;
}

djm03178   2년 전

(v-b)/(a-b)-1

= ((v-b)-(a-b))/(a-b)

= (v-a)/(a-b)

namin2ya   2년 전

@kkdky1

식을 도출해냈습니다.

v < ax- b(x-1) // b는 무조건 a가 올라간 날보다 하루 작습니다. +) 본 행동이 막대기의 길이보다 무조건 크거나 같아야 달팽이가 올라가는 최소한의 날을 구할 수 있게 되겠습니다.

v< ax- bx + 1

v< ax - bx + b

v-b < x(a-b)

(v-b) / (a-b) < x

이므로 x는 (v-b) / (a-b) +1 인 수라고 생각했습니다.

덧붙여 설명하자면 (v-b) / (a-b)는 int로 받아 항상 정수지만, (v-b) / (a-b)가 나머지가 있는 경우에는 그 수보다 크면서 정수인 가장 작은수로는 int( (v-b) / (a-b) +1 ) 이므로 (v-b) / (a-b) +1 이 되겠습니다. 

여기서 예외로는 v-b와 a-b를 나눴을때 나머지가 없는 경우 이며 이 같은경우 나머지가 없이 바로 정수로 떨어지는 수이므로 -1을 해준 것 입니다.

댓글을 작성하려면 로그인해야 합니다.