과제로 받은 개미수열 !
베르나르 베르베르의 "개미"라는 책에 나왔다고 한다.
수열의 규칙은
1부터 시작하며, 다음 행을 구할 때는 이전 행에 있는
'숫자'와 '연속되는 숫자의 갯수'를 순서대로 모두 나열하며된다는 것이다.
.
.
.
즉, 첫 행이 1이면
1) 첫행의 숫자인 '1'과 1의 갯수인 '1'개가 두번째 행이된다.
1
11
2) 세번째행은 두번째행의 숫자 '1'과 연속된 숫자 1의 갯수 '2'개가 세번째 행이된다.
1
11
12
3) 네번째 행도 마찬가지로 숫자 '1'과 1의 갯수 '1'개, 숫자 '2'와 ' 2의 갯수 '1'개가 네번째 행이 된다.
1
11
12
1121
4) 위와 같은 규칙으로 다섯번째 행까지구하면.... '1'이 연속 '2개 + '2'가 '1'개 + '1'이 '1'개 이므로
1
11
12
1121
122111
.
.
.
.
이런식으로 수열을 무한히 구할 수 있다!
[Java] 개미수열 코드
main안에 한번에 쓰고싶었는데 뭘 잘못했는지..ㅠㅠ 입력받은 줄만큼 출력하기 위한 반복문에서
while을 쓰던 for를 쓰던 무한루프가 걸려서 메소드로 따로만들었더니 잘됐당...(;ㅅ;) 왜.......
* prnLine 메소드 : 앞 행의 문자열을 통해 다음 행의 '숫자'와 '갯수'를 구해 문자열로 리턴.
* numberOf 메소드 : 문자열에 있는 연속된 문자(실제론 숫자)의 갯수를 카운트
- 각각의 행을 String 으로 받아, charAt(index)으로 번짓수마다 문자를 확인하여 갯수(cnt)를 셈
- 연속된 숫자의 갯수를 세고나면, charAt()으로 확인할 번지수 점프
ㄴ> 네번째 행 1121에서 index 0번지의 '1'의 연속된 갯수를 센 뒤 1번지가 아닌, 2번지의 '2'의 갯수를 세기위함..
- 출력 순서를 인덱스에 있는 문자(실제론 숫자) + 연속카운트한 갯수 를 반복하여 다음 행을 구함.
- 그 이후의 행을 구하기전에, 현재 구한 행을 앞행의 문자열에 저장.
- 계속 반복 ...!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.lang.String; import java.util.Scanner; public class AntSequence { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("::: 베르나르 베르베르의 개미수열 :::"); System.out.println("몇 줄을 출력하시겠습니까?"); int line = sc.nextInt(); System.out.println("=================================="); String pre = new String("1"); String next = ""; int index = 0; while(index<line) { next = prnLine(pre); pre = next; index++; } }//main end public static String prnLine(String pre) { String next = ""; System.out.println(pre); for(int i=0 ; i<pre.length() ; i++) { if(i>0) { if(pre.charAt(i-1)==pre.charAt(i)) { continue; } } next += numberOf(pre,i); } return next; } private static String numberOf(String preLine, int index) { char str = preLine.charAt(index); int cnt = 0; for(int j=index ; j<preLine.length() ; j++) { if(str == preLine.charAt(j)) { cnt++; }else { break; } } return str + Integer.toString(cnt); } }//class end | cs |
'Java' 카테고리의 다른 글
[Java8] Stream(스트림) - map/filter/sort/distinct (0) | 2021.11.24 |
---|---|
[Java] Servlet(서블릿)과 JSP 기초 (0) | 2019.05.16 |
[Java] DAO/DTO 객체 (0) | 2019.04.21 |
[Java] MVC패턴 이해하기 (0) | 2019.04.20 |
[Java]자바 주사위 게임 (2인플레이) (0) | 2019.03.05 |