별 찍기 - 7 성공분류
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
5
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
*
***
*****
*******
*********
*******
*****
***
*
내 코드
import java.util.Scanner;
public class No2444 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
}
}
가장 첫번째로 나타나는 for 문은 두가지 조건을 맞춰야한다.
- 반복 횟수를 행 횟수와 일치시켜야한다.
- i 값을 각 행에서 요긴하게 쓸 수 있는 값으로 지정해야한다.
저번에는 후자만 생각해서 글을 써서 뭔가 좀 부족했던 것 같다. 전자가 충족되지 않으면 첫번째 for 문은 의미가 없다.
일단 출력해야할 마름모를 두개의 삼각형으로 나눠서 두 개의 for문을 실행시킬 것이다.
*
***
*****
*******
*********
---------
*******
*****
***
*
이렇게 위아래로 나눈다면 위의 삼각형은 별찍기 5번에서 했던 그대로 for문을 작성해주면 된다.
for (int i = 1; i <= n; i++) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
아래 삼각형은 첫번째 for 문만 오름차순이 아니라 내림차순으로 바꿔주면 된다. 어차피 i 값을 갖고 각 행에 찍는 시스템은 일치하기 때문에 첫번째 for 문 블록안의 코드는 똑같이 한다.
for (int i = n - 1; i >= 1; i--) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
별 찍기 - 8 성공분류
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
5
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
* *
** **
*** ***
**** ****
**********
**** ****
*** ***
** **
* *
내 코드
package com.heejin.baekjoon.star;
import java.util.Scanner;
public class No2445 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++)
System.out.print("*");
for (int j = 0; j < 2 * (n - i); j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.println();
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 0; j < i; j++)
System.out.print("*");
for (int j = 0; j < 2 * (n - i); j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.println();
}
}
}
이것도 위의 문제와 마찬가지로 그림을 위아래로 쪼개어 두개의 for 문으로 만든다.
* *
** **
*** ***
**** ****
**********
----------
**** ****
*** ***
** **
* *
- 위 아래 중 위의 그림에 대하여 첫번째 for 문은 각 행에서 가장 먼저 찍히는 *별의 개수로 정한다.
- i 값에 대하여 한 행에서 *을 i개 찍고, 빈공간을 2 (n - i)개 찍고, 마지막으로 다시 *을 i개 찍은 후 줄바꿈을 하면 완성이다.
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++)
System.out.print("*");
for (int j = 0; j < 2 * (n - i); j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.println();
}
이렇게 위에 그림이 완성되면 아래 그림을 그리기 위해 첫번째 for 문 선언부만 바꿔주면 된다. 일단 행의 개수가 n - 1개이고 각 행에서 가장 먼저 찍히는 별의 개수가 n - 1에서부터 작아져 1까지 내림차순이다. 이에 따라 for 문만 변경한다.
for (int i = n - 1; i >= 1; i--) {
for (int j = 0; j < i; j++)
System.out.print("*");
for (int j = 0; j < 2 * (n - i); j++)
System.out.print(" ");
for (int j = 0; j < i; j++)
System.out.print("*");
System.out.println();
}
별 찍기 - 9 성공분류
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
5
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
*********
*******
*****
***
*
***
*****
*******
*********
내 코드
package com.heejin.baekjoon.star;
import java.util.Scanner;
public class No2446 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = n; i >= 1; i--) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
for (int i = 2; i <= n; i++) {
for (int j = 0; j < n - i; j++)
System.out.print(" ");
for (int j = 0; j < 2 * i - 1; j++)
System.out.print("*");
System.out.println();
}
}
}
이것은 별찍기 - 7에서 나눈 위 아래 그림의 자리를 서로 바꿔준 모양새이므로 이에 따라 두 그림을 만든 for 문의 자리를 서로 바꿔주면 되겠지만 그렇게 풀지 않고 직접 다시 풀었다. 그런데 아마 그렇게 풀어도 될것이다.
각 행의 그림을 찍는 시스템은 별찍기 - 7과 완전히 같기 때문에 해설은 생략하고, 첫번째 for 문 선언부만 봤을 때, 위의 그림은 n 에서부터 1까지 내림차순으로 i를 지정하여 n 번 반복하고, 아래의 그림은 2에서부터 n까지 오름차순으로 i를 지정하여 n - 1번 반복한다.
'자바 자료구조 & 알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 이분 탐색 문제 : 입국심사 (0) | 2020.10.12 |
---|---|
백준 별찍기 시리즈 - 2440, 2441, 2442, 2443번 (0) | 2020.09.07 |
백준 4948번 : 베르트랑 공준 (0) | 2020.09.06 |