백준 3076번 풀이

KSH·2022년 1월 9일
0
post-thumbnail

백준 3076번 : 상근이의 체스판


# (1) 3076번 상근이의 체스판
import sys
input = sys.stdin.readline

R, C = map(int, input().split())
A, B = map(int, input().split())


for i in range(R * A): # 행별로 반복
    for j in range(C * B):  # 열별로 반복
        if ((i % (A*2)) < A) == ((j % (B*2)) < B): # X가 처음 나오는 행 조건과 X가 나오는 열 조건 교집합
            print("X", end="") # 교집합을 만족할때 X출력
        else:
            print(".", end="") # 나머지 .출력
    print("")

예제 입력 2를 예로 들어보자.
5 5
2 3

① if 문에서 (i % (A * 2) < A의 의미

A인 2에 따라서 행의 처음이 X인지 .인지 결정한다.

A가 2이므로

처음에 X로 시작하는 행 2개인 1, 2행이 끝나면 3, 4행이 . 으로 시작하게 된다.

다음부터는 이 사이클이 반복된다.

이 한 사이클에서 행의 개수는 4개, A * 2다.

따라서, 행의 개수인 i를 A*2로 나눈 나머지가 A보다 작다는 것은

1,2행, 즉 처음에 X로 시작한다는 뜻이다.

② if 문에서 (j % (B*2) < B의 의미

B에 따라서 하나의 행에 X가 몇 개 연속으로 출력될지 결정된다.

하나의 행에서 반복되는 열의 사이클은 XXX... or ...XXX 이렇게 B*2로 6개이다.

따라서 1,2,3열 / 4,5,6열으로 나눌 수 있다.

①번의 경우와 마찬가지로 열의 개수인 j를B*2로 나눈 나머지가 B보다 작다는 것은 1,2,3열, 즉 3개의 문자를 연속으로 출력한다는 것이다.

③ ((i % (A 2) < A) == ((j % (B 2) < B)

각각 논리연산자로 비교하기 때문에 반환값은 ture나 false일텐데

한 사이클에서 X가 출력되는 경우는 1,2행 1,2,3열 / 3,4행 4,5,6열

→ true == true / false == false 의 경우이다.

.이 출력되는 경우는 1,2행 4,5,6열 / 3,4행 1,2,3열

→ 나머지 경우

④ 반복문으로 여러문자 한 줄에 출력할 때 print문에 end=”” 사용하기


적고 나서도 다시 풀면 못 풀 것 같다..;;
나머지를 활용하는 방법에 초점을 맞추자!
나머지를 활용해서 자기보다 낮은 숫자를 골라낼 수 있다!
1,2,3 % 4 => 1, 2, 3 출력

profile
성실히 살아가는 비전공자

0개의 댓글