프랙탈 알고리즘을 연습해보자 ! 

주어진 문제는 Junit에서 테스트 코드로 해당 함수를 호출했을때 정상적으로 프랙탈이 그려질 수 있도록 

알고리즘을 짜는 것이었다. 

매가값 n 만큼 늘어나야하는데 

1씩 증가할때마다

F => F-H 가 되어야하고 

H => F+H가 되어야한다. 

만들어진 문구 F, H는 앞으로 나가는 방향을 의미하고 

+ 는 시계방향으로 90도 회전 

-  는 반시계방향으로 90회전한다. 

단,

메서드를 추가해서는 안되고 하나의 메소드로 해결해야하며 

loop 를 사용할 수 없다.

 

예_

// myFractal(0) = F-H
// myFractal(1) = F-H-F+H
// myFractal(2) = F-H-F+H-F-H+F+H
// myFractal(3) = F-H-F+H-F-H+F+H-F-H-F+H+F-H+F+H

public static String myFractal(int n) {
		
		// myFractal(0) = F-H
		// myFractal(1) = F-H-F+H
		// myFractal(2) = F-H-F+H-F-H+F+H
		// myFractal(3) = F-H-F+H-F-H+F+H-F-H-F+H+F-H+F+H

		if (n == 0) {
			return "F-H";
		}

		return myFractal(n-1).replaceAll("H", "D").replaceAll("F", "F-H").replace("D", "F+H");
}

 

답) 

우선 입력받은 n 번 만큼 반복되어야 하기 때문에 (n-1) 이 되어야겠다.~ 라고 생각했다. 

loop와 추가 메소드를 사용할 수 없기에 재귀호출이 되어야겠다고 생각했고 myFractal(n-1) 이 나왔다! 

if문을 사용해 재귀호출에 break 를 걸어주는 부분을 만들었고 

replaceAll() 함수를 이용해 문자를 변경하려고 했다. 

그런데 F를 F-H로 변경하고 H를 다시 F+H로 변경하려고 보니 변경된 문자를 다시 변경하게되는 이슈가 있었다.

그래서 H를 D로 변경해둔 뒤 F변경하고 D를 F+H로 변경하는 방법으로 구현했다!

 

흠!! 잘 나온다 성공! 

 

+ Recent posts