ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기지국 설치
    코딩 테스트/Level 3 2020. 10. 10. 00:58
    반응형

    기지국 설치
    Summer/Winter Coding(~2018)
    899명 완료

    레벨3 중 쉬운 편
    리스트을 안쓰는 방법으로... 

    https://programmers.co.kr/learn/courses/30/lessons/12979

     

    코딩테스트 연습 - 기지국 설치

    N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5

    programmers.co.kr

    시뮬레이션

    def solution(n, stations, w):
        apartments = [False] * n
        for station in stations:
            for i in range(station - w - 1, station + w):
                if 0 <= i < n:
                    apartments[i] = True
        gaps = []
        counter = 0
        for apartment in apartments:
            if apartment is False:
                counter += 1
            else:
                if counter != 0:
                    gaps.append(counter)
                counter = 0
        if counter != 0:
            gaps.append(counter)
        width = w * 2 + 1
        answer = 0
        for coverage in gaps:
            answer += coverage // width + (1 if coverage % width else 0)
        return answer
    정확성  테스트
    테스트 1 〉	통과 (0.04ms, 10.6MB)
    테스트 2 〉	통과 (0.04ms, 10.7MB)
    테스트 3 〉	통과 (0.04ms, 10.8MB)
    테스트 4 〉	통과 (0.04ms, 10.6MB)
    테스트 5 〉	통과 (0.04ms, 10.7MB)
    테스트 6 〉	통과 (0.04ms, 10.7MB)
    테스트 7 〉	통과 (0.04ms, 10.7MB)
    테스트 8 〉	통과 (0.04ms, 10.8MB)
    테스트 9 〉	통과 (0.04ms, 10.7MB)
    테스트 10 〉	통과 (0.03ms, 10.7MB)
    테스트 11 〉	통과 (0.04ms, 10.8MB)
    테스트 12 〉	통과 (0.04ms, 10.8MB)
    테스트 13 〉	통과 (0.04ms, 10.6MB)
    테스트 14 〉	통과 (0.04ms, 10.8MB)
    테스트 15 〉	통과 (0.04ms, 10.7MB)
    테스트 16 〉	통과 (0.05ms, 10.6MB)
    테스트 17 〉	통과 (0.04ms, 10.6MB)
    테스트 18 〉	통과 (0.05ms, 10.7MB)
    테스트 19 〉	통과 (0.05ms, 10.7MB)
    테스트 20 〉	통과 (0.05ms, 10.8MB)
    테스트 21 〉	통과 (0.06ms, 10.6MB)
    효율성  테스트
    테스트 1 〉	실패 (시간 초과)
    테스트 2 〉	실패 (시간 초과)
    테스트 3 〉	실패 (시간 초과)
    테스트 4 〉	실패 (시간 초과)

    실패

    리스트을 거의 안쓰는 방법으로... 

    def solution(n, stations, w):
        gaps = []
        answer = last_end = 0
        for station in stations:
            start, end = station - w, station + w
            if start <= last_end:
                last_end = max(end, last_end)
            else:
                gaps.append(start - 1 - last_end)
                last_end = end
        if last_end < n:
            gaps.append(n - last_end)
        width = w * 2 + 1
        for gap in gaps:
            answer += gap // width + (1 if gap % width else 0)
        return answer
    정확성  테스트
    테스트 1 〉	통과 (0.06ms, 10.7MB)
    테스트 2 〉	통과 (0.04ms, 10.7MB)
    테스트 3 〉	통과 (0.04ms, 10.7MB)
    테스트 4 〉	통과 (0.04ms, 10.7MB)
    테스트 5 〉	통과 (0.04ms, 10.8MB)
    테스트 6 〉	통과 (0.04ms, 10.7MB)
    테스트 7 〉	통과 (0.03ms, 10.6MB)
    테스트 8 〉	통과 (0.04ms, 10.7MB)
    테스트 9 〉	통과 (0.03ms, 10.7MB)
    테스트 10 〉	통과 (0.04ms, 10.8MB)
    테스트 11 〉	통과 (0.04ms, 10.7MB)
    테스트 12 〉	통과 (0.04ms, 10.7MB)
    테스트 13 〉	통과 (0.04ms, 10.8MB)
    테스트 14 〉	통과 (0.04ms, 10.7MB)
    테스트 15 〉	통과 (0.03ms, 10.7MB)
    테스트 16 〉	통과 (0.04ms, 10.7MB)
    테스트 17 〉	통과 (0.04ms, 10.7MB)
    테스트 18 〉	통과 (0.04ms, 10.7MB)
    테스트 19 〉	통과 (0.04ms, 10.7MB)
    테스트 20 〉	통과 (0.04ms, 10.7MB)
    테스트 21 〉	통과 (0.04ms, 10.6MB)
    효율성  테스트
    테스트 1 〉	통과 (2.58ms, 15.1MB)
    테스트 2 〉	통과 (2.82ms, 15.1MB)
    테스트 3 〉	통과 (2.71ms, 15.1MB)
    테스트 4 〉	통과 (2.71ms, 15MB)

    성공

    리스트를 안씀.

    def solution(n, stations, w):
        answer = last_end = 0
        width = w * 2 + 1
        for station in stations:
            start, end = station - w, station + w
            if start <= last_end:
                last_end = max(end, last_end)
            else:
                gap = start - 1 - last_end
                answer += gap // width + (1 if gap % width else 0)
                last_end = end
        if last_end < n:
            gap = n - last_end
            answer += gap // width + (1 if gap % width else 0)
        return answer
    정확성  테스트
    테스트 1 〉	통과 (0.03ms, 10.6MB)
    테스트 2 〉	통과 (0.03ms, 10.5MB)
    테스트 3 〉	통과 (0.05ms, 10.8MB)
    테스트 4 〉	통과 (0.04ms, 10.7MB)
    테스트 5 〉	통과 (0.04ms, 10.7MB)
    테스트 6 〉	통과 (0.05ms, 10.8MB)
    테스트 7 〉	통과 (0.04ms, 10.6MB)
    테스트 8 〉	통과 (0.04ms, 10.6MB)
    테스트 9 〉	통과 (0.04ms, 10.8MB)
    테스트 10 〉	통과 (0.04ms, 10.6MB)
    테스트 11 〉	통과 (0.04ms, 10.7MB)
    테스트 12 〉	통과 (0.03ms, 10.8MB)
    테스트 13 〉	통과 (0.04ms, 10.7MB)
    테스트 14 〉	통과 (0.04ms, 10.8MB)
    테스트 15 〉	통과 (0.03ms, 10.7MB)
    테스트 16 〉	통과 (0.04ms, 10.6MB)
    테스트 17 〉	통과 (0.04ms, 10.6MB)
    테스트 18 〉	통과 (0.04ms, 10.7MB)
    테스트 19 〉	통과 (0.04ms, 10.5MB)
    테스트 20 〉	통과 (0.04ms, 10.7MB)
    테스트 21 〉	통과 (0.04ms, 10.7MB)
    효율성  테스트
    테스트 1 〉	통과 (2.33ms, 15MB)
    테스트 2 〉	통과 (2.44ms, 15.1MB)
    테스트 3 〉	통과 (2.44ms, 14.9MB)
    테스트 4 〉	통과 (2.40ms, 15MB)
    반응형
Designed by Tistory.