일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 핸즈온 머신러닝
- 최소 스패닝 트리 자바
- 가운데 글자 가져오기 java
- 최단 경로 알고리즘
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- codeup 1020 자바
- 프로그래머스 가운데 글자 가져오기 자바
- m1 docker install
- docker 삭제
- 가운데 글자 가져오기 파이썬
- 코드업 1020 java
- 청년 Ai Big Data 아카데미
- 가운데 글자 가져오기 자바
- 최소 스패닝 트리
- 나누어 떨어지는 숫자 배열 java
- 빅데이터분석기사
- 프로그래머스 가운데 글자 가져오기 python
- codeup 1020 java
- 청년 AI Big Data 아카데미 13기
- 빅분기실기
- 코드업 1020 자바
- docker 완전 삭제
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- docker remove
- 나누어 떨어지는 숫자 배열 python
- 트리의 지름 java
- m1 docker
- 프로그래머스 가운데 글자 가져오기 파이썬
- 트리의 지름 자바
- 가운데 글자 가져오기 python
- Today
- Total
NineTwo meet you
[백준] 10993 별 찍기 - 18 본문
출처
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 10)이 주어진다.
출력
첫째 줄부터 차례대로 별을 출력한다.
예제
풀이
index가 3부터 n이 될때까지 증가하며 index값이 짝수일때와 홀수일때 각각 하는일이 다르다.
짝수일때 하는 일 // 역삼각형 만들기
우선 이전에 만든 삼각형모양의 도형이 존재한다. (파란 삼각형)
(짝수 그림 1)

1. 이전 삼각형의 ArrayList.size()-1인덱스 값 양쪽에 *을 추가한다.
(짝수 그림 2)

2. 이전 삼각형 맨 뒤부터 *(count 개수만큼 빈칸)*을 추가하고 마지막 제일 아래에 꼭짓점이 되는 *을 추가한다.
(짝수 그림 3)

3. 이전 삼각형을 *(count 개수만큼 빈칸)(원래 삼각형)(count 개수만큼 빈칸)*으로 교체한다.
(짝수 그림 4)

4.맨 윗줄에 가득찬 *줄을 추가한다.
(짝수 그림 5)

홀수 일때 하는 일 // 삼각형 만들기
우선 이전에 만든 삼각형모양의 도형이 존재한다. (파란 삼각형)
(홀수 그림 1)

1. 이전 삼각형의 0인덱스 값 양쪽에 *을 추가한다.
(홀수 그림 2)

2. 이전 삼각형을 *(count 개수만큼 빈칸)(원래 삼각형)(count 개수만큼 빈칸)*으로 교체한다.
(홀수 그림 3)

3. 맨 아래 가득찬 *줄을 추가한다.
(홀수 그림 4)

4. 이전 삼각형 앞에 *(count 개수만큼 빈칸)*을 추가하고 마지막 제일 위에 꼭짓점이 되는 *을 추가한다.
(홀수 그림 5)

마지막으로 완성된 도형을 가운데 정렬로 만들기 위해
짝수인 경우, al.size()-1부터 0으로 가면서 앞에 공백을 추가한다.
(짝수 그림 6)

홀수인 경우, 0부터 al.size()-1으로 가면서 앞에 공백을 추가한다.
(홀수 그림 6)

코드
import java.util.LinkedList; | |
import java.util.ArrayList; | |
import java.util.Scanner; | |
public class BOJ10993 { | |
public static void main(String[] args) { | |
Scanner scanner = new Scanner(System.in); | |
int n = scanner.nextInt(); | |
ArrayList<String> al = new ArrayList<>(); | |
if(n == 1) { // n이 1일때 예외적으로 처리 | |
System.out.println("*"); | |
}else if(n == 2) { // n이 2일때 예외적으로 처리 | |
System.out.println("*****"); | |
System.out.println(" ***"); | |
System.out.println(" *"); | |
}else if(n >= 3) { | |
al.add("*****"); | |
al.add("***"); | |
al.add("*"); | |
for(int i = 3; i <= n; i++) { | |
if(i%2 == 0) { // 짝수일때 (짝수 그림1) | |
//중간 별양쪽추가 (짝수 그림2) | |
al.add(al.size()-1, "*"+al.remove(al.size()-1)+"*"); | |
int index = al.size()-1; | |
//아래 역삼각형 1개 추가 (짝수 그림3) | |
int count = al.get(al.size()-1).length()-4; | |
String empty = ""; | |
for(; count >= 1;) { | |
empty = ""; | |
for(int j = 0; j < count; j++) { | |
empty += " "; | |
} | |
count-=2; | |
al.add("*"+empty+"*"); | |
} | |
al.add("*"); | |
//위에 역삼각형 2개 추가 (짝수 그림4) | |
count = (al.get(index).length()- al.get(index-1).length())/2; | |
empty = ""; | |
for(int k = index-1; k >= 0; k--) { | |
empty = ""; | |
for(int j = 0; j < count; j++) { | |
empty += " "; | |
} | |
al.add(k, "*"+empty+al.remove(k)+empty+"*"); | |
count += 2; | |
} | |
//맨위 별줄 추가 (짝수 그림5) | |
count = al.get(0).length() + 2; | |
String star = ""; | |
for(int j = 0; j < count; j++) { | |
star += "*"; | |
} | |
al.add(0, star); | |
}else {// 홀수일때 (홀수 그림 1) | |
//중간에 별양쪽 추가 (홀수 그림 2) | |
al.add(0,"*"+al.remove(0)+"*"); | |
//밑에 정삼각형 2개 추가 (홀수 그림 3) | |
int count = (al.get(0).length()- al.get(1).length())/2; | |
String empty = ""; | |
for(int k = 1; k < al.size(); k++) { | |
empty = ""; | |
for(int j = 0; j < count; j++) { | |
empty += " "; | |
} | |
al.add(k, "*"+empty+al.remove(k)+empty+"*"); | |
count += 2; | |
} | |
//맨밑 별줄 추가 (홀수 그림 4) | |
count = al.get(al.size()-1).length() + 2; | |
String star = ""; | |
for(int j = 0; j < count; j++) { | |
star += "*"; | |
} | |
al.add(star); | |
//위에 삼각형 1개 추가 (홀수 그림 5) | |
count = al.get(0).length()-4; | |
for(;count >= 1;) { | |
empty = ""; | |
for(int j = 0; j < count; j++) { | |
empty += " "; | |
} | |
count -= 2; | |
al.add(0, "*"+empty+"*"); | |
} | |
al.add(0,"*"); | |
} | |
} | |
// 최종적으로 삼각형의 앞에 존재하는 공백을 추가한다. | |
int count = 0; | |
String empty =""; | |
if(n%2 == 0) { // n이 짝수일때, (짝수 그림 6) | |
for(int j = 0; j < al.size(); j++) { | |
empty = ""; | |
for(int k = 0; k < count; k++) { | |
empty += " "; | |
} | |
al.add(j, empty+al.remove(j)); | |
count++; | |
} | |
}else { // // n이 홀수일때, (홀수 그림 6) | |
count = 0; | |
for(int j = al.size()-1; j >= 0; j--) { | |
empty = ""; | |
for(int k = 0; k < count; k++) { | |
empty += " "; | |
} | |
al.add(j, empty+al.remove(j)); | |
count++; | |
} | |
} | |
//결과 출력 | |
for(int i = 0; i < al.size(); i++) { | |
System.out.println(al.get(i)); | |
} | |
} | |
} | |
} |
'프로그래밍 문제 > 백준' 카테고리의 다른 글
[백준] 10995 별 찍기 - 20 (0) | 2020.06.26 |
---|---|
[백준] 10994 별 찍기 - 19 (0) | 2020.06.26 |
[백준] 10992 별 찍기 - 17 (0) | 2020.06.26 |
[백준] 10991 별 찍기 - 16 (0) | 2020.06.26 |
[백준] 10990 별 찍기 - 15 (0) | 2020.06.26 |