< 프로그래밍 완전 생초보의 코딩일기 >
http://justpost.tistory.com/47
이 분 블로그 예제를 활용하여 도형문제를 풀어 보았다.
예제 1
*
**
***
****
*****
for(int i = 0;i<5 ;i++) {
for(int j=0;j<=i;j++) {
System.out.print('*');
}
System.out.println();
}
예제 2
*****
****
***
**
*
for(int i = 4; i>=0;i--) {
for(int j = 0; j<=i; j++) {
System.out.print('*');
}
System.out.println();
}
예제 3
*
**
***
****
*****
for(int i = 0; i<digit;i++) {
for(int j = 0; j < digit; j++) {
if(j >= (digit-i-1)) {
System.out.print('*');
}
else {
System.out.print(' ');
}
}
System.out.println();
}
예제 4
*
***
*****
*******
*********
for(int i=0;i<digit;i++) {
for(int j = 0; j <= ( 2*digit-1 ); j++) {
if(j>=digit-i && j<=digit+i) {
System.out.print('*');
}
else {
System.out.print(' ');
}
}
System.out.println();
}
예제 5
*********
*******
*****
***
*
for(int i = 0;i < digit;i++) {
for(int j =0; j<i;j++) {
System.out.print(' ');
}
for(int s =0; s< 2*(digit-i)-1; s++) {
System.out.print('*');
}
System.out.println();
}
if-else문을 쓰지 않고 풀어보았다. ' ' 을 for문으로 먼저 찍고, 이후 '*' 을 for으로 찍었다.
예제 6
*
**
***
****
*****
****
***
**
*
방법 1
Scanner scan = new Scanner(System.in);
System.out.print("최고 높이를 입력해주세요 : ");
int max = scan.nextInt();
for(int i =0; i< max; i++) {
for(int j=0; j<= i; j++) {
System.out.print('*');
}
System.out.println();
}
for(int s =0; s< max-1;s++) {
for(int z=0; z < max-1-s;z++) {
System.out.print('*');
}
System.out.println();
}
나는 이중 for문을 두 개를 사용하여 올라갈 때, 내려갈 때의 *을 찍었다.
방법2
int max = scan.nextInt();
int maxline = 2*max-1;
int count = 0;
for(int i =0; i< maxline; i++) {
if(i<max) {
count++;
for(int j =0; j<count; j++) {
System.out.print('*');
}
System.out.println();
}
else {
count--;
for(int s =0; s<count; s++) {
System.out.print('*');
}
System.out.println();
}
}
난 이 방법에 신선한 충격을 받았다. count 변수를 생성해서 * 이 찍히는 개수를 조절하는 것이다. [ + -> - ] , [ - > + ] 와 같이 흐름이 변화할 때, 따로 변수 하나를 생성해서 흐름을 추적하면 효율적이다.
예제 7
for(int i =0; i<digit; i++) {
if(i==0 || i == digit-1) {
for(int j = 0; j < digit; j++) {
System.out.print("*");
}
System.out.println();
}else {
for(int s =0;s<digit;s++) {
if(s==0 || s == digit-1) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
|| 연산자를 이용하여, 원하는 i, j 값에만 * 이 찍히게 만들었다.
예제 8
방법1
for(int i =0; i<digit; i++) {
if(i==0 || i == digit-1) {
for(int j = 0; j < 2*digit; j++) {
if(j%2==0)System.out.print('*');
else System.out.print(' ');
}
System.out.println();
}else {
for(int s =0;s<2*digit;s++) {
if(s==0 || s == 2*(digit-1)) System.out.print('*');
else System.out.print(' ');
}
System.out.println();
}
}
예제7 도형에 가로줄 *사이에 공백이 추가된 도형이다. 그래서 나는 for문의 길이를 2배로 늘리고, j가 짝수일 때만 *을 찍고 홀수 일때는 공백을 찍었다. 하지만... 더 쉬운 방법이 있었다.
방법2
for(int i =0; i<digit; i++) {
if(i==0 || i == digit-1) {
for(int j = 0; j < digit; j++) {
System.out.print("* ");
}
System.out.println();
}else {
for(int s =0;s<digit;s++) {
if(s==0 || s == digit-1) {
System.out.print("* ");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}
예제 7 코드에서 그대로 공백만 추가하면 되었다. "*" => "* ".
이렇게 하면 굳이 코드를 수정하지 않아도 원하는 도형을 얻어낼 수 있다.
배운 점
1. 조건문을 사용하여 통제하려 들지 않아도, 코드는 위에서 아래로 컴파일 된다는 특성을 활용하여 내가 원하는 출력을 얻어낼 수 있다. (예제 5)
2. 출력이 상태가 변하는 경우, 이를 추적하는 변수를 생성하는 것이 좋다.(예제6)
3. "* ", 도형 간격이 너무 붙어있으면 간단히 공백 하나 넣는 것으로 원하는 출력을 얻어 낼 수 있다. (예제 8)
'JAVA > JAVA Basic' 카테고리의 다른 글
[Java] 조건문과 반복문 심화 (0) | 2020.11.22 |
---|---|
[Java] 연산자 정리하기 (0) | 2020.11.21 |
강제형변환(Casting)과 데이터 손실 (0) | 2020.11.19 |
10진수를 2진수, 8진수, 16진수로 변환 프로그램 (With Java) 2 (0) | 2020.09.09 |
10진수를 2진수, 8진수, 16진수로 변환 프로그램 (With Java) 1 (0) | 2020.09.04 |