Back-end/JAVA,Spring

자바 연습) 피라미드 만들기 소스코드.

cheersHena 2018. 6. 12. 18:38
반응형


JAVA - 피라미드 만들기.


문제) 


주어진 문자열을 이용해 피라미드를 건설하고자 합니다.

아래 메서드의 구현부를 완성하면 됩니다.


public static String watchPyramidFromTheSide(String characters)

: 이 메서드는 피라미드를 옆에서 보았을때 모습을 출력하면 됩니다.


The first method ("FromTheSide") shows the pyramid as you would see from the side.

public static String watchPyramidFromAbove(String characters)

: 이 메서드는 피라미드를 위에서 내려보았을때의 모습을 출력하면 됩니다.


public static int countVisibleCharactersOfThePyramid(String characters)

: 이 메서드는 위에서 내려보았을때 보이는 블럭(문자)의 수를 계산하면 됩니다.


public static int countAllCharactersOfThePyramid(String characters)

: 이 메서드는 피라미드가 완성되었을때 구성하고 있는 모든 블럭(문자)의 수를 계산하면 됩니다.


주어진 문자열에서 각 문자는 피라미드의 한 층(floor)을 구성하게 됩니다. 

따라서 주어진 문자열의 길이가 피라미드의 총 층수(floor)가 됩니다.

각 층은 주어진 문자열에 맞게끔 지어져야 합니다. 피라미드의 각 층은 정사각형으로 구성됩니다. 


Example

 - Given string: "abc


피라미드를 옆에서 보았을 때:

  c

 bbb

aaaaa


피라미드를 위에서 내려다 보았을 때:

aaaaa

abbba

abcba

abbba

aaaaa


위에서 내려다 보았을때 보이는 블럭(문자)의 수 : 25

피라미드를 구성하는 모든 블럭(문자)의 수 : 35


주어진 문자열은 연속된 문자/숫자가 아니고 문자열의 길이 제한은 없습니다. 또한 공백일 수 없습니다. [aaaaa(x) abcde(o), 11111(x) 12345(o)]


피라미드를 옆에서 보았을 때의 모습을 출력할 땐, 직 사각형안에 블럭(문자)가 출력되어야 합니다. 그러므로 줄 끝의 공백을 잘 생각해야 합니다.

만약 문자열이 null이거나 비어있다면 watch-메서드는 빈 문자열을,

 count-메서드는 -1을 반환합니다.



소스코드 및 주석)


public class Pyramid {
        
    public static String watchPyramidFromTheSide(String characters) {//옆에서 본 피라미드
        String result = "";
        
        if(characters!=null && characters!="") { //인풋값이 빈값이 아닌 경우.
            int input_leng = characters.length(); //인풋 문자열의 길이 저장.(편의위해)
            
        int i=0, j=0;
     for(i =0; i< input_leng; i++) { //문자열 길이만큼 첫번째 반복문.
         for(j =input_leng-(i+1) ; j>0; j--) {//이중반복문: 문자열갯수 ~ 0 까지 공백출력 .
             result = result+" ";
         }
        for(j =0; j<(i*2)+1; j++) {// 홀수갯수(1,3,5,7...)만큼 늘여가며 각 문자열 하나씩 출력.
             result = result+characters.charAt((input_leng-1)-i);//charAt으로 문자열하나씩 추출.
         }
        for(j =input_leng-(i+1) ; j>0; j--) {//공백 한번더 출력
             result = result+" ";
         }
        if(i<input_leng-1) {//for문이 다시 돌아갈때만
            result = result+"\n"; //3번의 2중 반복 끝나면 줄바꿈.
        } //즉,모든반복이 끝나면 줄바꿈 찍지 않는다.
     }return result;
    
        }else return characters;//인풋값이 빈값(null or "")일 경우 들어온 인풋값 그대로 리턴한다.
    
    }   
    

    public static String watchPyramidFromAbove(String characters) {
        String result = "";
        
        if(characters!=null && characters!="") {    //인풋값이 빈값이 아닌 경우.
            
        int input_leng = characters.length(); //인풋 문자열의 길이 저장.(편의위해)
        int i=0, j=0;
        //내가찾은규칙: 총 6등분 하여 각 구역의 규칙으로 2번의 2중반복 사용..
             for(i =0; i<input_leng; i++) { // 0~ 문자열 길이 까지.
                 for(j=0; j<i+1; j++) { //문자열 차례로 갯수늘여가며 출력.
                     result = result+characters.charAt(j);
                 }for(j=0; j<(input_leng-(i+1))*2; j++) { // 한문자만 규칙에 따라 출력.
                     result = result+characters.charAt(i);
                 }for(j=i-1; j>=0; j--) { //문자열 거꾸로 갯수 늘여가며 출력.
                     result = result+characters.charAt(j);
                 }
                 result = result+"\n";
             } // 규칙은 같으나 반대로 시작됨. 문자열 길이 ~ 0 까지.
             for(i =input_leng-1; i>0; i--) {
                 for(j=0; j<i; j++) {
                     result = result+characters.charAt(j);
                 }for(j=0; j<(input_leng-i)*2; j++) {
                     result = result+characters.charAt(i-1);
                 }for(j=i-1; j>0; j--) {
                     result = result+characters.charAt(j-1);
                 }
                 if(i>1) { //for문 끝나면 줄바꿈 찍기 않기 위한 조건.
                 result = result+"\n";
                 }
             }
             return result;
        }else return characters;
    }

    public static int countVisibleCharactersOfThePyramid(String characters) {
        if(characters!=null && characters!="") {//인풋값이 빈값이 아닌 경우.   
            int result= (characters.length()*2-1)*(characters.length()*2-1); //(인풋길이*2-1)의 제곱.
            return result;
        }else return -1;
    }

    public static int countAllCharactersOfThePyramid(String characters) {
        if(characters!=null && characters!="") {    
            int result =0;
            int temp = (characters.length()*2-1);////(인풋길이*2-1)값 구하기.
            for(int i=0; i<characters.length(); i++) {
                result = result+(temp*temp); //(인풋길이*2-1)의 제곱근의 합..
                temp = temp-2; //(인풋길이*2-1) 에서 0 까지 반복하며 -2씩감소한 값의 제곱근을 더한다.
            }
            return result;
        }else return -1;
    }
}

 



출력결과) 


************** basicTest5DescendingOrderedCharacters ************
From side correct:
1
222
33333
4444444
555555555
From side yours:
1
222
33333
4444444
555555555
-------------------------------------------------
From above correct:
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
From above yours:
555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555
***************** pyramidTest1 *****************
From side correct:
#
***
From side yours:
#
***
-------------------------------------------------
From above correct:
***
*#*
***
From above yours:
***
*#*
***
***************** pyramidTest2 *****************
From side correct:
c
bbb
aaaaa
From side yours:
c
bbb
aaaaa
-------------------------------------------------
From above correct:
aaaaa
abbba
abcba
abbba
aaaaa
From above yours:
aaaaa
abbba
abcba
abbba
aaaaa
***************** pyramidTest3 *****************
From side correct:
e
ddd
ccccc
bbbbbbb
aaaaaaaaa
From side yours:
e
ddd
ccccc
bbbbbbb
aaaaaaaaa
-------------------------------------------------
From above correct:
aaaaaaaaa
abbbbbbba
abcccccba
abcdddcba
abcdedcba
abcdddcba
abcccccba
abbbbbbba
aaaaaaaaa
From above yours:
aaaaaaaaa
abbbbbbba
abcccccba
abcdddcba
abcdedcba
abcdddcba
abcccccba
abbbbbbba
aaaaaaaaa


반응형

'Back-end > JAVA,Spring' 카테고리의 다른 글

SQL - CURSOR 커서  (0) 2018.07.01
[java]자바에서 인덱스란? Index  (0) 2018.06.22
관계형 데이터 베이스 Relational Database  (0) 2018.06.11
Data. DBMS  (0) 2018.06.08
자바 연습) 유용한 연습문제 소스코드.  (0) 2018.06.06