hahn

[백준 - JAVA] 별 찍기 - 18 본문

코딩테스트 연습/백준(JAVA)

[백준 - JAVA] 별 찍기 - 18

hahn 2021. 9. 16. 18:21
728x90
반응형

10993번: 별 찍기 - 18 (acmicpc.net)

 

10993번: 별 찍기 - 18

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

http://boj.kr/c801a71bcd8b435bacc948a50c813659

 

공유 소스 보기

 

www.acmicpc.net

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
		
		int inputNumber = sc.nextInt(),
			arrLength = 1;
		
		String[] printArr = {"*"}, storeArr;
		
		String blank,
			   starPattern = "*",
			   oneStarPattern = "*",
			   inblank,
			   rightBlank,
			   leftBlank;
		
		for(int i = 2; i <= inputNumber; i++) {
			
			storeArr = printArr.clone();
			
			blank = "";
			inblank = " ";
			rightBlank = "";
			leftBlank = "";
			
			arrLength = (int) Math.pow(2, i) - 1;
			
			printArr = new String[arrLength];
			
			starPattern = starPattern + starPattern + "***";
			
			for(int j = 0; j < Math.pow(2, i - 1); j++) {
				
				blank += " ";
				
			}
			
			oneStarPattern = blank + oneStarPattern;
			
			blank = oneStarPattern.substring(0, oneStarPattern.indexOf("*"));
			
			if(i % 2 == 0) {
				
				printArr[0] = starPattern;
				printArr[printArr.length - 1] = oneStarPattern;
				
				for(int j = printArr.length - 2; j > 0; j--) {
					
					if(blank.length() > 1) blank = blank.substring(1);
					
					if(j <= printArr.length / 2) {
						
						printArr[j] = blank + "*" + leftBlank + storeArr[j - 1] + rightBlank + "*";
						rightBlank += "  ";
						leftBlank += " ";
						
					}else {
						
						printArr[j] = blank + "*" + inblank + "*";
						inblank += "  ";						
						
					}
					
				}
				
			}else {
				
				printArr[0] = oneStarPattern;
				printArr[printArr.length - 1] = starPattern;
				
				for(int j = 1; j < printArr.length - 1; j++) {
					
					if(blank.length() > 1) blank = blank.substring(1);
					
					if(j >= printArr.length / 2) {
						
						printArr[j] = blank + "*" + leftBlank + storeArr[j - printArr.length / 2] + rightBlank + "*";
						rightBlank += "  ";
						leftBlank += " ";
						
					}else {
						
						printArr[j] = blank + "*" + inblank + "*";
						inblank += "  ";
						
					}
					
				}
				
			}
			
		}
		
		for(int i = 0; i < printArr.length; i++) {
			
			System.out.println(printArr[i]);
			
		}
        
    }
    
}

머리가 너무 안 돌아갔나

 

진짜 토 나오는 문제였다...

 

처음에는 삼항 연산자 때려 박다가 가독성 떨어져서

 

그냥 갈아 엎었다 ㅋㅋㅋㅋ

 

여기서

 

이거 따로 만들고

 

이것도 따로...

 

원형에서 공백 조건 따로 했다.

 

처음에는 좀 짧고 간결하게 코드 짜려했는데

 

어제부터 별 찍기만 하니까 생각하기 싫어서

 

그냥 다 따로 분할해서 풀었다..

 

그 결과 코드가 매우 길다 ㅋㅋ......

728x90
반응형

'코딩테스트 연습 > 백준(JAVA)' 카테고리의 다른 글

[백준 - JAVA] 별 찍기 - 20  (0) 2021.09.17
[백준 - JAVA] 별 찍기 - 19  (0) 2021.09.17
[백준 - JAVA] 별 찍기 - 17  (0) 2021.09.16
[백준 - JAVA] 별 찍기 - 16  (0) 2021.09.16
[백준 - JAVA] 별 찍기 - 15  (0) 2021.09.16