자바/이론(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); } }
반응형