16. 중간 난이도 연습문제
16.10 살아 있는 사람
- 사람의 태어난 연도와 사망한 연도가 리스트로 주어졌을 때, 가장 많은 사람이 동시에 살았던 연도를 찾는 메서드를 작성하라. 모든 사람이 1900년도에서 2000년도에 살아 있었다고 봐야 한다. 예를들어 어떤 사람이 1908년에 태어나서 1909년에 사망했다면 이 사람은 1908년과 1909년 모두에 삶을 살았던 사람이 된다.
16.11 다이빙 보드
- 다량의 널빤지를 이어 붙여서 다이빙 보드를 만들려고 한다. 널빤지는 길이가 긴 것과 짧은 것 두 가지 종류가 있는데, 정확히 K개의 널빤지를 사용해서 다이빙 보드를 만들어야 한다. 가능한 다이빙 보드의 길이를 모두 구하는 메서드를 작성하라.
16.12 XML 인코딩
- XML은 너무 장황하게 표현된 경우가 많다. 그래서 그 크기를 줄이기 위해 각각의 태그를 지정된 정수 값으로 대응시키는 인코딩(encoding) 방법을 사용하곤 한다. 그 문법은 다음과 같다.
Element → Tag Attribute END Children END
Attribute → Tag Value
END → 0
Tag → 미리 지정된 정수값으로의 매핑
Value → 문자열 값
- 예를 들어, 아래의 XML은 family → 1, person → 2, firstName → 3, lastName → 4, state → 5로 대응시킴으로써 압축된 형태의 문자열로 변환할 수 있다.
<family lastName=”McDowell” state=”CA”>
<person firstName=”Gayle”>Some Message</person>
</family>
1 4 McDowell 5 CA 0 2 3 Gayle 0 Some Message 0 0
- XML 요소(element)가 주어졌을 떄, 해당 요소를 인코딩한 문자열을 출력하는 메서드를 작성하라.