아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이진 트리의 3색 칠하기

면접 대비

시간 제한3초메모리 제한128 MB

요약
이진 트리를 숫자열 명세로 받아 인접한 정점과 형제가 다른 색이 되도록 빨강, 초록, 파랑으로 칠하고, 초록 정점 수의 최댓값과 최솟값을 구한다.
난이도

보통10점 중 6점

유형
트리, DFS, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

트리는 하나의 노드와, 그 노드에 연결된 몇 개(0개, 1개 또는 2개)의 서브트리로 이루어진다. 이 서브트리들을 자식(children)이라고 부른다.

트리의 명세(specification)는 숫자들의 나열이다. 트리의 자식 수가:

  • 0개이면, 명세는 원소가 0 하나뿐인 나열이다.
  • 1개이면, 명세는 1로 시작하고 그 뒤에 자식의 명세가 이어진다.
  • 2개이면, 명세는 2로 시작하고 그 뒤에 첫 번째 자식의 명세, 이어서 두 번째 자식의 명세가 온다.

트리의 모든 정점은 빨강, 초록, 파랑 중 하나로 칠해야 한다. 단, 다음 규칙을 지켜야 한다.

  • 정점과 그 자식은 같은 색일 수 없다.
  • 한 정점에 자식이 둘 있으면, 두 자식은 서로 다른 색이어야 한다.

이때 초록으로 칠할 수 있는 정점은 최대 몇 개이고 최소 몇 개인가?

다음을 수행하는 프로그램을 작성하라.

  • 표준 입력에서 트리의 명세를 읽는다.
  • 초록으로 칠할 수 있는 정점 수의 최댓값과 최솟값을 계산한다.
  • 결과를 표준 출력에 쓴다.

입력

표준 입력의 첫 번째이자 유일한 줄에 트리의 명세인 한 단어가 주어진다. 이 단어의 길이는 10000자를 넘지 않는다.

출력

표준 출력의 첫 번째이자 유일한 줄에 정수 두 개를 공백 하나로 구분해 출력한다. 각각 초록으로 칠할 수 있는 정점 수의 최댓값과 최솟값이다.

예제3

  1. 예제 1

    입력
    1122002010
    
    예상 출력
    5 2
    
  2. 예제 2

    입력
    0
    
    예상 출력
    1 0
    
  3. 예제 3

    입력
    10
    
    예상 출력
    1 0