프랙탈 알고리즘을 연습해보자 !
주어진 문제는 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로 변경하는 방법으로 구현했다!
흠!! 잘 나온다 성공!

'알고리즘 & 기능' 카테고리의 다른 글
| 재귀호출을 이용한 배열의 합계 구하기! (0) | 2020.11.04 |
|---|---|
| Math.pow() 함수 직접 구현해보기! (0) | 2020.11.04 |