트리에서 찾는 신비한 알파벳 두 개
면접 대비시간 제한1초메모리 제한128 MB
숫자 삼각형에서 합이 최대인 위에서 아래 경로를 고르고 동점은 제곱합으로 가른 뒤 두 합과 26으로 나눈 나머지 알파벳을 출력합니다.
- 난이도
쉬움10점 중 3점
- 유형
- 동적 계획법
- 정답자
- 아직 제출이 없습니다
문제
높이가 인 트리가 있고, 각 노드에 정수가 하나씩 들어 있다. 레벨 ()에는 노드가 개 있고, 각 노드는 바로 아래 레벨에서 이웃한 두 노드와 이어진다. 이 두 노드가 그 노드의 자식이다. 레벨 의 노드에는 자식이 없다. 레벨 안쪽에 있는 노드는 부모가 둘일 수도 있다. 트리의 모양은 아래 그림과 같다.
1
/ \
4 5
/ \ / \
7 8 9
루트에서 시작해 매 단계 자식 중 하나로 내려가고 마지막 레벨에서 멈춘다. 이렇게 만드는 경로 중 노드 값의 합이 가장 큰 경로를 고른다. 위 그림에서는 인 경로다. 이어져 있지 않은 노드끼리는 더할 수 없어서 은 경로가 아니다.
고른 경로에서 수를 두 개 구한다. 첫 번째 수는 경로 위 값을 각각 제곱해서 더한 값이고, 두 번째 수는 경로 위 값을 그대로 더한 값이다. 위 그림에서 첫 번째 수는 , 두 번째 수는 이다.
합이 가장 큰 경로가 여러 개면 그중 제곱의 합이 가장 큰 경로를 고른다.
두 수는 각각 'a'부터 'z'까지의 소문자 하나로 바꾼다. 이 'a', 가 'z'다. 알파벳은 26개뿐이라 보다 큰 수는 26으로 나눈 나머지에 해당하는 알파벳을 쓴다. 그래서 , , 는 모두 'a'다. 위 그림에서 은 'd', 는 'p'가 된다.
트리가 주어졌을 때 신비한 알파벳 두 개를 찾는 프로그램을 작성하시오.
입력
첫째 줄에 트리의 높이 이 주어진다. ()
둘째 줄에 트리의 값이 레벨 1부터 레벨 까지 차례대로, 같은 레벨 안에서는 왼쪽부터 순서대로 공백으로 구분되어 주어진다. 값은 모두 인 정수이고, 개수는 개다.
출력
첫째 줄에 위 규칙으로 구한 두 수를 첫 번째 수, 두 번째 수 순서로 공백 하나를 사이에 두고 출력한다.
둘째 줄에 두 수를 바꾼 알파벳 두 개를 같은 순서로 붙여서 출력한다.