1. 문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
2. 코드
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
System.out.print(" ");
}
for(int j=0;j<2*(n-i)-1;j++){
System.out.print("*");
}
System.out.println();
}
for(int i=1;i<n;i++){
for(int j=0;j<n-1-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
3. 풀이
표를 그려 나타내면 다음과 같다. (n=3일때)
i | 빈칸개수 | * 개수 |
첫번째 반복문 | ||
0 | 0 | 5 = (3-0) * 2 |
1 | 1 | 3 = ( 3 - 1 ) * 2 |
2 | 2 | 1 = ( 3 - 2 ) * 2 |
두번째 반복문 | ||
1 | 1 = ( 3 - 1 ) - 1 | 3 = 2 * 1 + 1 |
2 | 0 = ( 3 - 1 ) - 2 | 5 = 2 * 2 + 1 |
따라서 첫번째 반복문에서의 빈칸 개수는 i 개 이고, * 개수는 ( n - i ) * 2 임을 알 수 있다.
두번째 반복문에서의 빈칸 개수는 ( n - 1 ) - i 개이고, * 개수는 2 * i + 1 임을 알 수 있다.
※ 출력 형식이 잘못 되었습니다. 라는 결과가 계속 나왔었는데,
eclipse에서 실행을 해도 출력 결과는 맞게 나왔다.
검색을 해보니
원인은 " 뒤에 공백은 출력하지않아도된다 " 라고 했는데, 나는 처음부터 코드를 짤때 뒤에 공백을 출력하지 않았기 때문에 내 원인은 다르다.
코드를 자세히 살펴보니까 n으로 입력해야 할 부분을 5로 입력했다. 그래서 코드를 실행시켰을 때, 예제처럼 5를 입력했을때, 같은 결과가 나온 것이다. 예제 입력이 아닌 다른 숫자를 넣어보았다면, 나의 코드에 문제가 있음을 한번에 알 수 있었을 텐데.. -> "예제에 나온 숫자만 입력해보지 말고 새로운 숫자도 입력해 볼것 "
4. 링크
https://www.acmicpc.net/problem/2446
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[JAVA] 10818번 : 최소, 최대 (0) | 2020.07.30 |
---|---|
[JAVA] 백준 10996번 : 별찍기 - 21 (0) | 2020.07.25 |
[JAVA] 2523 : 별찍기 -13 (0) | 2020.07.23 |
[JAVA] 백준 10817번 : 세 수 (0) | 2020.07.23 |
[JAVA] 백준 5543번 : 상근날드 (1) | 2020.07.23 |