1669번 멍멍이 쓰다듬기
이왜틀?
Scanner sc=new Scanner(System.in);
long num=(sc.nextLong()-sc.nextLong())*-1;
long distance=1;
int answer=1;
for(int j=1;;) {
if(num<distance+j) break;
else {
distance+=j;
answer++;
if(answer%2!=0) j++;
}
}
System.out.println(answer);
얼추 맞는데 한가지 조건을 더 고려해야한다.
키를 0cm 조절할 수도 있다.
설계
키를 1cm 단위로 조절할 수 있는데, 첫 날과 마지막 날은 반드시 1cm다.
전체 수열은 1, 2, 3, 2, 1 형태가 될거다.
수열의 가장 높은 값을 k로 두면 수열의 합은 k^2, 길이는 2 * k - 1이다.
0cm 조절도 가능하니 1, 2, 3, 3, 2, 1 형태의 수열도 가능하다.
이런 경우 합은 k * (k + 1) 이며 길이는 2 * k
구현
위 공식을 적용한다.
X, Y = map(int, input().split())
sub = Y - X
k = 0
result = 0
while sub > 0:
if k * k >= sub:
result = 2 * k - 1
break
elif k * (k + 1) >= sub:
result = 2 * k
break
k += 1
print(result)
채점
반성
과거 자바코드 변수명이 의아해서 찾아보니 1011번 문제가 이 문제와 흡사하다.
1011번 Fly me to the Alpha Centauri - 백준
이 문제는 6년 전에 유사 코드로 통과한 기록이 있다.
아마 비슷한 문제라서 코드를 살짝 고쳐서 집어넣었다가 틀리고 그대로 도망간 것으로 추측된다.
코드 확인