마법의 엘리베이터_복습

하이솝·5일 전

코테 · DP

목록 보기
8/8

2026.09.21

문제 풀이

1차 실행 오류


46.2/100.0

실패


실패 원인 분석

storey = 67 일 때,

if (storey / 10 == 0)

조건문에 걸려서 storey = 7 이 그대로 result에 더해지고 끝난다.


class Solution {
    public int solution(int storey) {
        int divisor = 10;
        int result = 0;
        while(true) {
            if (storey / divisor == 0) {
                result += storey;
                break;
            }
            int remain = storey % divisor;
            storey /= divisor;
            if (remain > 5) {
                result = result + (10 - remain);
                storey++;
            }
            else {
                result += remain;
            }
        }
        
        return result;
    }
}

2차 실행 오류


76.9/100.0

실패


실패 원인 분석

storey = 555 일 때,

if (remain > 5)

조건문으로 인해 result = 14 가 나와야 하지만, result = 15 가 나오게 된다.


class Solution {
    public int solution(int storey) {
        int result = 0;
        while(true) {
            if (storey == 0) {
                break;
            }
            int remain = storey % 10;
            storey /= 10;
            if (remain > 5) {
                result = result + (10 - remain);
                storey++;
            }
            else {
                result += remain;
            }
        }
        
        return result;
    }
}

나의 코드


소요 시간: 1시간
시간 복잡도: O(logstorey)O(log storey)


class Solution {
    public int solution(int storey) {
        int result = 0;
        while(true) {
            if (storey == 0) {
                break;
            }
            int remain = storey % 10;
            storey /= 10;
            if (remain > 5 || (remain >= 5 && storey % 10 >= 5)) {
                result = result + (10 - remain);
                storey++;
            } else {
                result += remain;
            }
        }
        
        return result;
    }
}

AI 코드


시간 복잡도: O(logstorey)O(log storey)


코드 분석

나의 코드와 동일


class Solution {
    public int solution(int storey) {
        int answer = 0;
        while (storey > 0) {
            int digit = storey % 10;
            storey /= 10;
            // 6 이상이면 올림, 5는 다음 자리가 5 이상일 때만 올림
            if (digit > 5 || (digit == 5 && storey % 10 >= 5)) {
                answer += 10 - digit;
                storey++;
            } else {
                answer += digit;
            }
        }
        return answer;
    }
}

문제 풀이 후기

AI로 반례를 찾아가며 무엇이 문제인지 확인 후 해결했다.
현재 수가 5일 때, 앞자리 수 여부에 따라 분기가 갈리는 것을 스스로 해결했지만, 반례를 AI가 찾아줬다는 점에서 완벽하게 스스로 성공했다고 하기 힘들다.

따라서 실패를 주되, 반만 성공을 주고 싶다.
연속으로 실패를 해서 마음이 좀 착잡했는데, 간만에 성공아닌 성공을 해서
기분이 좀 나아지는 것 같다.

다음에는 반례도 직접 찾아서 해결을 해야겠다.

0개의 댓글