Algorithms

[백준 알고리즘] (I/O) 10992번 Java 풀이

SDev 2020. 3. 9. 22:58
728x90

입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

출처: https://plzrun.tistory.com/entry/알고리즘-문제풀이PS-시작하기 [plzrun's algorithm]

 

알고리즘 문제풀이(PS) 시작하기

이런건 고수들이나 써야 하지 않나 싶지만, 그래도 1년정도 공부하면서 이 분야를 어떻게 시작해야 할지 써보려 한다. 라고 운을 뗀다음 열심히 내 얘기만 했던 후속편이다. 내 인생사가 궁금하신 분들은 이 글의..

plzrun.tistory.com

 

백준 알고리즘 10992번

 

 

change Nxxxx -> Main && remove package lines!!!

이클립스에서 작성하면서 문제 이름으로 클래스를 생성하여 풀었기 때문에

클래스 이름을 Main으로 바꾸고, package 부분도 지우고 제출해야 정상적으로 돌아갑니다.

 

<풀이>

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
31
32
33
34
35
36
37
38
39
package io;
 
import java.util.Scanner;
 
public class N10992 {
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        for(int p=0; p<n-1; p++) {
            System.out.print(" ");
        }
        System.out.print("*");
        System.out.println("");
        
        for(int p=0; p<n-2; p++) {
            for(int q=0; q<n-p-2; q++) {
                System.out.print(" ");
            }
            System.out.print("*");
            for(int q=0; q<2*p+1; q++) {
                System.out.print(" ");
            }
            System.out.print("*");
            System.out.println("");
        }
        
        if(n!=1) {
            for(int p=0; p<2*n-1;p++) {
                System.out.print("*");
            }    
        }
        
    }
 
}
 
 
 

 

문제를 보면 겉으로는 이전까지 풀었던 별 찍기 문제와 굉장히 유사해 보이는데,

개인적으로는 처음 접근할 때 좀 당황스러웠다.

처음 직관적으로 들었던 생각은 마지막 행만 따로 코딩해주고 이전의 10991번 문제와 유사하게 코딩을 하면 되지 않을까 싶었는데,

문제는 1행을 제외한 2~n-1행까지(n=입력 값) 별을 두 개만 찍는다는 것이었다.

여기에 if문을 사용해서 처리할 수도 있었겠지만, 문제를 다르게 접근했다.

 

이미 마지막 행을 따로 코딩할 생각을 하고 있었기때문에, 첫 행도 따로 코딩을 해주기로 한 것이다.

즉, 문제를 세 부분으로 나눠 접근했다.(이런 접근 방식을 Divide & Conquer =분할정복 기법이라고 불렀던 것 같다.)

첫 행, 2~(n-1)행, 마지막 행.

이렇게 접근하니 어렵지 않게 문제가 해결되었다.

딱 하나의 사소한 문제만 빼고...

(n=1, 1을 입력했을 때 마지막 행을 따로 코딩한 부분에서 무시해버려야 하는데 별 하나를 찍어버렸다.)

물론 이런 예외 case를 처리하기 위해 if문 하나를 추가해주면서 간단히 처리할 수 있었다.

 

겉으로 보기에는 이전 10991번 문제와 굉장히 유사한 출력을 내뱉는데

코딩은 전혀 다르게 하다보니, 참 신기하다.

다른 분들의 풀이도 궁금해서 구글링을 통해 찾아봤는데 if문을 많이 활용하신 분들이 많았는데

결과적으로는 그 분들의 코드가 훨씬 간결해보였다.

 

 

 

Github: https://github.com/jaeuk9407/AlgorithmBOJ

 

jaeuk9407/AlgorithmBOJ

BaekJoon Online Judge Problems. Contribute to jaeuk9407/AlgorithmBOJ development by creating an account on GitHub.

github.com