링크🔗
https://www.acmicpc.net/problem/16967
🗒️파이썬 코드 풀이
H,W,X,Y = map(int,input().split(" "))
lst_b = [list(map(int,input().split(" "))) for _ in range(H+X)]
for h in range(H):
for w in range(W):
lst_b[h+X][w+Y] = lst_b[h+X][w+Y] - lst_b[h][w]
print(lst_b[h][w], end=" ")
print()
1. 단순 구현 문제이다.
2. 배열 A의 크기는 H,W이고, A에서 (X,Y) 만큼 이동 한 것을 합한게 B 이므로,
합쳐지는 과정에 겹치는 것을 빼주면 된다.
ex) H =2, W=4, X=1, Y=1
1 | 2 | 3 | 4 | 0 |
5 | 7 (1+6) | 9 (2+7) | 11 (3+8) | 4 |
0 | 5 | 6 | 7 | 8 |
for ~ H / for ~ W 까지만 반복문을 돌려주고,
X,Y 이동한 것 기준으로 기존의 것을 빼주면 기존 A 배열 나온다.
📌 문제 코멘트
구현 문제인데, 인덱싱만 잘 생각하면 어렵지 않은 문제이다.
처음에는 거꾸로 인덱싱하면서 값을 구해보려했는데, 잘 안됐다.
뭔가 아니다 싶을 때는 다시 한번 생각해보자 !
📚문제
크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때, 크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸, 오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.
즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.
- (i, j)가 두 배열 모두에 포함되지 않으면, Bi,j = 0이다.
- (i, j)가 두 배열 모두에 포함되면, Bi,j = Ai,j + Ai-X,j-Y이다.
- (i, j)가 두 배열 중 하나에 포함되면, Bi,j = Ai,j 또는 Ai-X,j-Y이다.
배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자.
입력
첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가 주어진다.
항상 배열 A가 존재하는 경우만 입력으로 주어진다.
출력
총 H개의 줄에 배열 A의 원소를 출력한다.
제한
- 2 ≤ H, W ≤ 300
- 1 ≤ X < H
- 1 ≤ Y < W
- 0 ≤ Bi,j ≤ 1,000
예제 입력 1 복사
2 4 1 1
1 2 3 4 0
5 7 9 11 4
0 5 6 7 8
예제 출력 1 복사
1 2 3 4
5 6 7 8
예제 입력 2 복사
3 3 2 1
1 2 3 0
4 5 6 0
7 9 11 3
0 4 5 6
0 7 8 9
예제 출력 2 복사
1 2 3
4 5 6
7 8 9
'알고리즘 > 알고리즘_백준' 카테고리의 다른 글
[Python][백준] 18429. 근손실 / 브루트포스,백트래킹 (S3) (0) | 2024.07.12 |
---|---|
[Python][백준] 1935. 후위 표기식2 / 자료,구조스택 (S3) (0) | 2024.07.11 |
[Python][백준] 15989. 1, 2, 3 더하기 4 / DP (0) | 2024.07.10 |
[Python][백준] 1446. 지름길 (0) | 2024.07.10 |
[Python][백준] 1927. 문자열 교환 (0) | 2024.07.09 |