자바/이론(Theory)

DAY007. JAVA(2)

피톤치즈 2017. 1. 17. 20:30
반응형

JAVA(2)

  • 예제 - 함수 구현하기
    /** count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     * A
     * AA
     * AAA
     * 
     * @param int count
     * @param String unit
     */
    public void showRectTri(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { //줄수
            for ( j = 0; j <= i; j++) {//1줄은 1개 2줄은 2개...count줄은 count개 이므로 j<=i
                System.out.print(unit);
            }
            System.out.println(""); //라인변경
        }
    }

    /** count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  AA
     * AAA
     * 
     * @param int count
     * @param String unit
     */
    public void showRevTri(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { //줄수
            for ( j = 0; j < count; j++) {// 공백의 수는 count -1 -줄수 , 줄수 만큼 문자 표시
                if ( (count-(j+1)) > i) { //공백은 count -(1+줄수) > i
                    System.out.print(" ");
                }
                else {                  //문자 표시
                    System.out.print(unit);
                }
            }
            System.out.println("");
        }
    }
  • 퀴즈

    • 예제를 이용하여 아래 문제 풀어보기
  • Quiz 1

    /** Quiz1. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  AAA
     * AAAAA
     * 
     * @param int count
     * @param String unit

     //이런 문제를 풀때는 모양을 사각형으로 자르는 것이 좋다.
     * |---|
     * |  A|
     * | AA|A
     * |AAA|AA
     * |---|
     * 이렇게 나눠보면 1줄에서는 사각형 뒤에 찍는것이 없고.
     * 둘째줄 1개, 셋째줄 2개 이런식이다.
     * 먼저 사각형 부분을 구현하고 그 뒤에 남는 부분은 for문을 추가해서 하면 좋다.
     * */
    public void showTri(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { //줄수
            for ( j = 0; j < count; j++) {//공백의 수는 count -1 -줄수 , 줄수 만큼 문자 표시
                if ( (count-(j+1)) > i) { //공백은 count -(1+줄수) > i
                    System.out.print(" ");
                }
                else { //unit 표시
                    System.out.print(unit);
                }
            }
            //사각형 영역 제외 나머지 부분 인쇄 구문.
            for ( j = 0; j < i; j++) { //첫줄은 표시하지 않기때문에 조건 설정 중요.
                System.out.print(unit); 
                // i = 0 , 통과
                // i = 1 , unit 한번 표시
            }
            System.out.println("");
        }
    }
  • Quiz 2
    /** Quiz2. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     * @param int count
     * @param String unit
     * 
     *   A
     *  A A
     * A   A
     * 
     * 이 문제도 사각형 모양으로 나눠서 하면 좋음.
     * |---|
     * |  A|
     * | A |A
     * |A  | A
     * |---|
     */
    public void showTriEmpty(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { //줄수
            for ( j = 0; j < count; j++) {//unit이 각 줄에 1번씩만 찍여야함.
                if ( count-i == j+1) { //unit이 슬래시 모양으로만 찍혀야함.
                    System.out.print(unit);
                }
                else { //공백표시
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { //사각형 뒷 부분출력.
                if ( i == j + 1) { // 역슬래시 모양으로 출력해야함.
                    System.out.print(unit);
                } else { // 공백 표시
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
    }
  • Quiz 3
    /** Quiz3. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  A A
     * AAAAA
     * 
     * @param int count
     * @param String unit
     */
    public void showTriEmpty1(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { 
            for ( j = 0; j < count; j++) {
                if ( count-i == j+1) { //슬래시 모양 출력
                    System.out.print(unit);
                }
                else if ( count - 1 == i) { //맨 아래는 공백대신 unit으로 채움.
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { //사각형 뒷부분 출력
                if ( i == j + 1) { // 역슬래시 모양 출력
                    System.out.print(unit);
                }
                else if ( count - 1 == i) { //맨 아래는 unit출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
    }
  • Quiz 4
    /** Quiz4. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  AAA
     * AAAAA
     *  AAA
     *   A
     * 
     * @param int count
     * @param String unit
     * 

     //이것도 사각형으로 잘라서 보는 것이 좋다.
     *  |---|---|
     * 1|  A|   |2
     *  | AA|A  |
     *  |AAA|AA |
     *  |---|---|
     *  | AA|A  |
     * 3|  A|   |4
     *  |---|---|
     */
    public void showRhombus(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) { //1, 2번 출력
            for ( j = 0; j < count; j++) { //1번 사각형 출력
                if ( (count-(j+1)) > i) {
                    System.out.print(" ");
                }
                else {
                    System.out.print(unit);
                }
            }
            for ( j = 0; j < i; j++) { //2번 사각형 출력
                System.out.print(unit);
            }
            System.out.println("");
        }

        for ( i = count-1; i > 0; i--) { //3,4 출력
            for ( j = count-1; j > 0; j--) {// 3번 출력
                if ( j < i) {
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { //4번 출력
                System.out.print(unit);
            }
            System.out.println("");
        }
    }
  • Quiz 5
    /** Quiz5. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  A A
     * A A A
     *  AAA
     *   A 
     * 
     * @param int count
     * @param String unit
     * 이것도 위에 처럼 사각형으로 나눠서 생각을 하면 됨.
     */
    public void showRhombus1(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) {
            for ( j = 0; j < count; j++) {
                if ( count-i == j+1 || ((j > (count -i)) && ((j-(count-i))%2 == 1))) {
// count-i == j+1 슬래시 출력 조건문
// ((j > (count -i)) && ((j-(count-i))%2 == 1)) 대각선 내부 출력 조건
// 두가지 모두 동작해야하므로 OR 연산자 적용
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) {
                if ( i == j+1 || ((i > 2) && ((i -j) % 2 == 1))) {
//i == j+1 역슬래시 출력 조건문
//((i > 2) && ((i -j) % 2 == 1)) 역슬래시 내부 출력 조건
// 두가지 모두 동작해야하므로 OR 연산자 적용
                    System.out.print(unit);
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }

        for ( i = count-1; i > 0; i--) {
            for ( j = count-1; j > 0; j--) {
                if ( j < i) { //3번째 사각형 출력 조건
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { //4번째 사각형 출력
                System.out.print(unit);
            }
            System.out.println("");
        }
    }
  • Quiz 6
    /** Quiz6. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     *   A
     *  A A
     * A   A
     *  A A
     *   A 
     * 
     * @param int count
     * @param String unit
     */
    public void showRhombus2(int count, String unit) {
        int i = 0;
        int j = 0;

        for ( i = 0; i < count; i++) {
            for ( j = 0; j < count; j++) { // 1번 사각형
                if ( count-i == j+1 ) { //슬래시모양 출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { // 2번 사각형
                if ( i == j+1 ) { //역슬래시 모양 출력
                    System.out.print(unit);
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }

        for ( i = count-1; i > 0; i--) {
            for ( j = count-1; j > 0; j--) { //3번 사각형 출력
                if ( j == i -1) { //역슬래시 모양출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < i; j++) { //4번 사각형 출력
                if ( j == i-1){//슬래시 모양 출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
    }
  • Quiz 7
    /** Quiz7. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     * A   A
     *  A A
     *   A
     *  A A
     * A   A 
     * 
     * @param int count
     * @param String unit
     */
    public void showX(int count, String unit) {
        int i = 0;
        int j = 0;
        for ( i = count; i > 0; i--) { 
            for ( j = count; j > 0; j--) { // 1번 사각형
                if ( j == i) { // 역슬래시 모양 출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 1; j < i; j++) { // 2번 사각형
                if ( j == i-1){ // 슬래시 모양 출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
        for ( i = 1; i < count-1; i++) {
            for ( j = 0; j < count-1; j++) { // 3번 사각형
                if ( count-i == j+1) { // 슬래시 모양 출력
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j <= i; j++) { // 4번 사각형
                if ( i == j) { // 역슬래시 모양 출력
                    System.out.print(unit);
                } 
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
    }
  • Quiz 8
    /** Quiz8. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
     * AAAAA
     * A   A
     * A   A
     * A   A
     * AAAAA 
     * 
     * @param int count
     * @param String unit
     * 
     * 이번 문제는 사각형을 2개로 나눠도 되고, 4개로 나눠도 되고 구역도 맘대로 정할수 있으나. 연속성을 위해서 기존 위에 처럼 나눠봄.
     * 
     * |---|--|
     *1|AAA|AA|2
     * |A  | A|
     * |A  | A|
     * |---|--|
     * |A  | A|
     *3|AAA|AA|4
     * |---|--|
     * 
     */
    public void showRectangle(int count, String unit) {
        int i = 0;
        int j = 0;
        for ( i = count; i > 0; i--) {
            for ( j = count; j > 0; j--) { // 1번 사각형
                if ( j == count || i == count) {
    //i == count 첫번째줄의 unit출력하기 위한 조건
    //j == count 나머지 unit 출력하기 위한 조건
    //두가지 경우 모두 출력해야하기 때문에 OR연산자로 묶음.
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 1; j < count; j++) {  // 2번 사각형
                if ( j == count-1 ||  i == count){
    //i == count 첫번째줄의 unit출력하기 위한 조건
    //j == count-1 나머지 unit 출력하기 위한 조건
    //두가지 경우 모두 출력해야하기 때문에 OR연산자로 묶음.
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
        for ( i = 0; i < count-1; i++) { 
            for ( j = 0; j < count-1; j++) { // 3번 사각형
                if ( j== 0 || i == count-2) {
    //i == count-2 마지막줄의 unit출력하기 위한 조건
    //j== 0 마지막전줄까지 unit 출력하기 위한 조건
    //두가지 경우 모두 출력해야하기 때문에 OR연산자로 묶음.
                    System.out.print(unit);
                }
                else {
                    System.out.print(" ");
                }
            }
            for ( j = 0; j < count; j++) { // 4번 사각형
                if ( count-1 == j || count-2 == i) {
    //count-2 == i 마지막줄의 unit출력하기 위한 조건
    //count-1 == j 마지막 전줄까지 unit 출력하기 위한 조건
    //두가지 경우 모두 출력해야하기 때문에 OR연산자로 묶음.
                    System.out.print(unit);
                } 
                else {
                    System.out.print(" ");
                }
            }
            System.out.println("");
        }
    }
  • Quiz 9
    /** Quiz9. count와 unit을 입력받아서
     * 
     * ex) count = 7, unit = A
     * 
6 0  7   * A      A      A      A      A      A      A
5 6  6   *       A     A     A     A     A     A
4 11 5   *            A    A    A    A    A
3 15 4   *                A   A   A   A
2 18 3   *                   A  A  A
1 20 2   *                     A A
0 21 1   *                      A 
     *  이 문제의 경우 2 구역으로 나누어야 함.
     * 왼쪽에 숫자는 첫번째 열은 unit 사이의 공백갯수, 뒤의 숫자는 문자 찍히기 전까지의 공백갯수이다.
     * 세법째 열은 unit이 출력된 횟수.
     * 해결방법은 먼저 공백갯수를 출력한뒤 문자를 한개씩 찍어보는 것을 먼저해보고
     * A
     *       A
     *            A
     *                A
     *                   A
     *                     A
     *                      A 

     * 완료되면 그 뒤에 표시부분을 구현하는 것이 좋다.
     * 
     * @param int count
     * @param String unit
     */
    public void showWaterworks(int count, String unit) {
        int i = 0; 
        int j = 0;
        int k = 0;

        int space = 0;

        for ( i = 0; i < count ; i++) {
            for ( j = 0; j < space; j++ ) { // 공백 갯수 출력
                System.out.print(" ");
            }

            for ( j = 0; j < count-i; j++) { // unit출력
                System.out.print(unit); // 공백후 최초 unit 출력
                for ( k = 0; k < (count - 1 - i); k++) { // 다음 unit까지 공백 출력
                    System.out.print(" ");
                }
            }
            space = space + count - (i + 1); 
            //space는 각 행의 공백을 찍기 위한 변수
            // 공백의 수가 count가 7인 경우, 0, 6, 11, 15. 18, 20, 21이고, 숫자사이의 차이가 순서대로 6, 5, 4, 3, 2, 1 이므로 전체 count에서 1씩 증가하면서 값을 빼준것을 누적하는 수식.
            System.out.println(" ");
        }
    }
  • Quiz 10
    /** Quiz10. count와 unit을 입력받아서
     * 
     * ex) count = 3, unit = A
     * 
21 6     *                      A            A
15 5     *                A                       A   
10 4     *           A                                A 
6  3     *       A                                       A
3  2     *    A                                            A
1  1     *  A                                                A
0  0     * A                                                   A
     * 
     * @param count
     * @param unit
     * 
     * 이문제의 경우도 사각형으로 구역을 나누어서 생각하면 의외의 해결책이 있다.
             * |-----------------------------|-----------------------------|
21 6  7      * |                     A       |       A                 
15 5 13      * |               A             |            A            
10 4 18      * |          A                  |                A        
6  3 22      * |      A                      |                   A     
3  2 25      * |   A                         |                     A   
1  1 27      * | A                           |                       A 
0  0 28      * |A                            |                        A 
         * |----------------------------|----------------------------|
         * 앞열의 숫자는 앞쪽 공백 갯수이고
         * 뒷열의 숫자는 바로 다음열의 문자와의 공백 갯수. 가장 아래열의 경우
         * 밑에 문자가 없으므로 0
*/
    public void showParabola(int count, String unit) {
        int i = 0;
        int j = 0;

        int space1 = (count + 1) * count / 2 - count; //앞공백 출력을 위한 변수
        // 수식은 1~count 까지의 합을 구하는 공식에 count를 뺀 값을 넣음. 이유는 
        // 0부터 count - 1까지  합을 구해야하기 때문.
        int space2 = 0;
        // unit을 출력한뒤 다음 unit 줄력까지의 공백을 계산하기 위한 변수

        for ( i = 0; i < count ; i++) {
            for ( j = 0; j < space1; j++ ) { //공백 출력
                System.out.print(" ");
            }
            System.out.print(unit); //unit 출력
            space2 = space2 + count - i;
            for ( j = 0; j < space2 - 1 ; j++) { //뒷공백 출력
                System.out.print(" ");
            }
            space1 = space1 - (count - i - 1);
            for (j = 0; j < space2 - 1; j++) { //두번째 사각형 앞공백 출력
                System.out.print(" ");
            }

            System.out.println(unit);
        }
    }
반응형