백준 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 출력