#2 절반정도 구현, #3 대부분 구현