1669번 멍멍이 쓰다듬기 | 뭐라도 하겠지

1669번 멍멍이 쓰다듬기

이왜틀?


img01

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)

채점


img02

반성


과거 자바코드 변수명이 의아해서 찾아보니 1011번 문제가 이 문제와 흡사하다.

1011번 Fly me to the Alpha Centauri - 백준

이 문제는 6년 전에 유사 코드로 통과한 기록이 있다.
아마 비슷한 문제라서 코드를 살짝 고쳐서 집어넣었다가 틀리고 그대로 도망간 것으로 추측된다.

코드 확인


Link to GitHub

Updated: