프로그래밍-학습기록/코딩테스트

백준 온라인 저지 | 10996 | 별 찍기 - 21

leesche 2020. 7. 22. 15:24

문제

나의 풀이

나는 가장 처음에 *이 출력되고, 두 번째부터 공백과 *이 함께 찍힌다고 인식했다. 그 찍히는 방식은 입력된 숫자가 홀짝이냐에 따라 달라진다. 그리고 그렇게 출력된 두 줄이 입력된 숫자만큼 반복된다.

package baekjunOnlineJudge;

import java.util.Scanner;

public class Bj_10996 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		for(int i=0; i<N; i++) {
			System.out.print("*");
			for(int j=0; j<Math.floor((N-0.1)/2); j++){
				System.out.print(" *");
			}
			System.out.println();
			for(int j=0; j<N/2; j++) {
				System.out.print(" *");
			}
			System.out.println();
		}			
	}
}

다른 사람 풀이 (출처: dlsghchl1)

그야말로 멋진 코드이다. 첫 번째의 별 하나 찍히는 것까지 구현됐다. '줄'을 나타내는 첫번째 for문의 제어식 조건문에 n*2를 넣었다. 가로로 뻗어나가는 '열'을 나타는 안 쪽 for문은 홀수 줄과 짝수 줄, 홀수 열과 짝수 열을 철저히 구분했다.

이렇게 풀 수 있는 사람이 되고 싶다.

package baekjunOnlineJudge;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Bj_10996_others {

	public static void main(String []args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        
        for (int i = 0; i < n*2; i++) {
            for (int j = 0; j < n; j++) {
                if (i % 2 == 0) {
                    if (j % 2 == 0)
                        sb.append('*');
                    else
                        sb.append(' ');
                } else {
                    if (j % 2 == 0)
                        sb.append(' ');
                    else
                        sb.append('*');    
                }
            }
            sb.append("\n");
        }
        System.out.print(sb);
     }
}