2차원 배열
오른쪽 삼각형 별 찍기
public class Test {
public static void main(String[] args) {
int N = 5;
int count = 0;
// 행이 5회니까 첫번째 반복문은 5번을 돈다.
for (int i = 0; i < N; i++) {
// 각각의 요소에 해당하는 반복문 (열)
for (int j = 0; j < N; j++) {
if (i > j) System.out.printf("%3s", " ");
else System.out.printf("%3d", ++count);
}
System.out.println();
}
}
}
여기서 count를 * 로 변경하면 별찍기가 됩니다.
i는 행이고, j는 열입니다.
대각선을 기준으로 오른쪽 위는 i < j 인 경우이고, 아래는 i > j 입니다.
printf() 를 사용하면 포맷된 문자 형태로 출력을 할 수 있습니다.
절구통 모양 별 찍기
public class Test {
public static void main(String[] args) {
int N = 5;
boolean isIncrease = true; // 공백이 증가하는가
int target = N / 2; // 변화 지점
int blank = 0; // 공백의 수
int count = 0;
while (count < 17) {
for (int i = 0; i < blank; i++) {
System.out.printf("%3s", " ");
}
for (int i = 0; i < N - 2 * blank; i++) {
System.out.printf("%3d", ++count);
}
System.out.println();
if (isIncrease) blank++;
else blank--;
if (blank == target) isIncrease = false;
}
}
}
변화 지점을 기준으로 공백이 증가하고, 감소합니다.
또한, 양쪽 대칭적으로 움직이므로 만약 공백의 수가 전체 행의 반이 된다면 공백의 수는 감소하게 됩니다.
두번째 for문에서 2를 곱해주는 이유는 양쪽으로 대칭하여 공백이 찍히기 때문입니다.
숫자의 개수는 전체에서 공백을 빼준 만큼 찍힙니다.
더보기
While 문
int target = 5 / 2; // 변화가 이루어지는 구간
int blank = 0; // 출력할 공백문자
boolean isIncrease = true; // 공백문자를 계속 증가시켜야하는지 아닌지
int no = 1;
while (no <= 17) {
// 공백을 출력
for (int i = 0; i < blank; i++) {
System.out.printf("%3s", " ");
}
// 숫자를 출력
// 2를 곱해주는 이유는 공백이 반대편에도 찍히기 때문에
for (int i = 0; i < 5 - 2 * blank; i++) {
System.out.printf("%3d", no++);
}
// 개행
System.out.println();
// 공백 증가 / 감소 판단
if (isIncrease) blank++;
else blank--;
// 변화지점 확인 -> 반대로 전환
if (blank == target) isIncrease = false;
}
728x90
'🧑💻 𝗣𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗶𝗻𝗴 > Java' 카테고리의 다른 글
Java 배열 뒤집기 + swap (0) | 2022.07.19 |
---|---|
Java 문자 아스키 코드로 변환하기 (문자 to 아스키) (0) | 2022.07.19 |
Java 프로젝트 만들고 이클립스 환경 유용하게 세팅하기 (0) | 2022.07.17 |
Java 4.15 이클립스 설치, 3.9.14 STS 설치 with MAC (0) | 2022.07.17 |
Java 설치된 자바 리스트 한번에 보기 with MAC (0) | 2022.07.17 |