• 티스토리 홈
  • 프로필사진
    2료일
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
2료일
  • 프로필사진
    2료일
    • 분류 전체보기 (118)
      • SWIFT개발 (29)
      • 알고리즘 (25)
      • Design (6)
      • ARkit (1)
      • 면접준비 (32)
      • UIkit (2)
      • Vapor-Server with swift (3)
      • 디자인패턴 (5)
      • 반응형프로그래밍 (12)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 22968-균형(swift풀이)
        2024년 12월 26일
        • 2료일
        • 작성자
        • 2024.12.26.:25

        https://www.acmicpc.net/problem/22968

        문제를 해석하는게 어려웠다. 그래서 나와같은 어려움이 있는 사람들을 위해 정리하자면..

        정점의 개수가 주어질때 해당 정점으로 만들수 있는 AVL Tree의 최대 높이를 구하자는 것이다. AVL Tree = 왼쪽과 오른쪽 노드의 층 차이가 1층보다 크면 안됨. 결국 같은 층이거나 1층차이이여만 한다. 맨 오른쪽의 예제를 보면 1과 10이 2층차이난다. 그냥 이렇게 해석하면 끝!

        딱 보자마자 아 이거 규칙이 있겟구나 생각을 하며 점을 찍어보았다.

        1로 그래프를 찍었을때 딱 저 부분이 킥이다. 저 1이 생기는 순간 한층을 더 아래로 내릴 수 있다. 왜냐? 1층차이니까!! 완전이진트리가 될 필요가 없다.

        그러므로 조금 더 규칙을 구하기 위해 경우를 좀 나열해보자.

        점이 6개가 되는 순간 7개부터는 한층 더 설계공사를 하여 4층이 된다.  마찬가지로 12일때는 5층이 된다.

        결국 1층일때는 1개가 필요하고

        2층일때는 2개

        3층일때는 4개

        4층일때는 7개 

        5층일때는 12개가 필요하다.

        어? 3층일때의 4 = 1(1층일때) + 2(2층일때) + 1, 4층일때의 7개 = 4(3층) + 2(2층) + 1, 5층일때의 12개 = 7(4층)+4(3층) + 1

        찾았다. 

        이제 코드를 보면서 더 알아보자

        //
        //  22968.swift
        //  Alogrithm2
        //
        //  Created by Sunho on 12/26/24.
        //
        
        import Foundation
        let t = Int(readLine()!)!
        var dp = Array(repeating: 0, count: 43)
        dp[1] = 1
        dp[2] = 2
        for i in 3...42 {
            dp[i] = dp[i-1] + dp[i-2] + 1
        }
        
        
        
        for i in 0..<t{
            let v = Int(readLine()!)!
            var temp = 0
            for h in 1...42 {
                if dp[h] > v {
                    break
                }
                temp = h
            }
            print(temp)
        }

        예제를 보면 최대값이 들어왔을때의 층은 42층이라고 이미 주고 있다. 그래서 각 층마다 최소의 개수를 구한 뒤

        이후에 v값이 하나씩들어온다. 주의해야할것이!! v값은 노드의 개수로 층 수가 아니다. 헷갈리면 안댐.

        그래서 7개 전에는 3층이고 15개 전인 14개까지는 4층이다. 하나씩 층별로 보며 주어진 것보다 층이 크다면 break걸고 이전의 값을 출력한다. 

        최대 42번까지밖에 안돌기때문에 처리속도가 매우빨라 모두 구해줄 수 잇었다 끝!

        '알고리즘' 카테고리의 다른 글

        산모양타일링 - swift  (1) 2024.11.15
        12980좋아하는 수열 - swift  (14) 2024.11.13
        상담원인원-Swift풀이  (1) 2024.11.12
        17298-Swift백준골드4  (2) 2024.10.08
        9251-Swift알고리즘  (1) 2024.03.17
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바