본문 바로가기
PS/AtCoder

[ABC250] B - Enlarged Checker Board (AtCoder Beginner Contest 250 with Java)

by Nahwasa 2022. 5. 9.

문제 : abc250_b

 

 

  패턴을 잘 살펴보면 결국 NxA행, NxB열의 문자열을 출력하면 된다. 그리고, 시작하는 문자가 '.'으로 시작하는게 A줄, 그 다음 '#'으로 시작하는게 A줄... 을 N줄동안 수행하면 된다. 단순 구현문제긴 한데 반복문에 익숙치 않다면 좀 어려울 수 있다. 4중 for문에서 처음 2중은 N과 A, 그 다음 2중은 N과 B라고 생각하면, 코드로는 4중 for문이지만 개념적으로는 2중 for문이 된다. 그럼 좀 더 쉽게 구해볼 수 있다.

  boolean값을 잘 설정해서 한번 구현해보자. 참고로 이하 코드에서 'i&1==0'은 i가 짝수라면 true, 홀수라면 false 이다(왜 그런지는 짝수와 홀수를 아무 숫자나 2진수로 바꿔보면 알 수 있다.). 'isWhite^swt'에서 '^'은 XOR이다. 좌우의 boolean값이 동일하다면 false, 다르다면 true가 된다.



코드 : github

...
private void solution() throws Exception {
    int n = nextInt();
    int a = nextInt();
    int b = nextInt();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) {
        boolean isWhite = (i&1)==0;
        for (int x = 0; x < a; x++) {
            for (int j = 0; j < n; j++) {
                boolean swt = (j&1)==1;
                for (int y = 0; y < b; y++) {
                    sb.append(isWhite^swt ? '.':"#");
                }
            }
            sb.append('\n');
        }
    }
    System.out.print(sb);
}
...

댓글