ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기둥과 보 설치
    코딩 테스트/Level 3 2020. 10. 11. 11:30
    반응형

    기둥과 보 설치
    2020 KAKAO BLIND RECRUITMENT
    819명 완료

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

     

    코딩테스트 연습 - 기둥과 보 설치

    5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[

    programmers.co.kr

    def solution(n, build_frame):
        result = set()
        for x, y, a, b in build_frame:
            if b == 1:  # build
                result.add((x, y, a))
                if not check(result):
                    result.remove((x, y, a))
            elif b == 0:  # delete
                if (x, y, a) in result:
                    result.remove((x, y, a))
                    if not check(result):
                        result.add((x, y, a))
        return sorted(list(each) for each in result)
    
    
    def check(result):
        for x, y, a in result:
            if a == 0:  # 기둥
                if not (y == 0 or (x - 1, y, 1) in result or (x, y, 1) in result or (x, y - 1, 0) in result):
                    return False
            else:  # 보
                if not ((x, y - 1, 0) in result or (x + 1, y - 1, 0) in result or ((x - 1, y, 1) in result and (x + 1, y, 1) in result)):
                    return False
        return True
    테스트 1 〉	통과 (0.07ms, 10.7MB)
    테스트 2 〉	통과 (0.09ms, 10.6MB)
    테스트 3 〉	통과 (0.08ms, 10.8MB)
    테스트 4 〉	통과 (0.12ms, 10.8MB)
    테스트 5 〉	통과 (0.13ms, 10.8MB)
    테스트 6 〉	통과 (0.35ms, 10.8MB)
    테스트 7 〉	통과 (0.05ms, 10.9MB)
    테스트 8 〉	통과 (0.07ms, 10.8MB)
    테스트 9 〉	통과 (0.09ms, 10.8MB)
    테스트 10 〉	통과 (13.23ms, 10.9MB)
    테스트 11 〉	통과 (46.04ms, 13.1MB)
    테스트 12 〉	통과 (10.58ms, 11MB)
    테스트 13 〉	통과 (48.04ms, 13.1MB)
    테스트 14 〉	통과 (11.47ms, 11.1MB)
    테스트 15 〉	통과 (49.78ms, 13.2MB)
    테스트 16 〉	통과 (11.61ms, 10.9MB)
    테스트 17 〉	통과 (44.76ms, 13.2MB)
    테스트 18 〉	통과 (36.59ms, 12.1MB)
    테스트 19 〉	통과 (40.07ms, 12.2MB)
    테스트 20 〉	통과 (38.96ms, 12.1MB)
    테스트 21 〉	통과 (41.78ms, 12.1MB)
    테스트 22 〉	통과 (36.11ms, 12MB)
    테스트 23 〉	통과 (40.25ms, 12.4MB)

    set도 딕셔너리처럼 속도가 빠르기 때문에..
    반복적인 작업에 유리합니다. 

    set은 원소로 리스트를 쓸 수 없기 때문에
    튜플을 써야 합니다.

    굳이 set이 때문이 아니더라도
    리스트보다 튜플이 빠르기 때문에 
    튜플을 쓸 수 있는 상황이라면
    튜플을 사용하는 게 좋습니다. 

    반응형
Designed by Tistory.