728x90
반응형
BaekJoon 백준 3023 마술사 이민혁 문제는 카드 뒷 면 왼쪽 위 1/4만 디자인한다. 대칭시켜 오른쪽 위를 만들고, 다시 대칭시켜 아래 부분을 만든다. 마술 하는 데 사용하기 위한 의도된 에러를 넣는다. 카드 뒷 면 전체 디자인을 구하는 문제이다. 난이도는 Bronze 1이다.
BaekJoon 3023 마술사 이민혁 문제 정보
출처
- https://www.acmicpc.net/problem/3023
알고리즘 분류
- 문자열 string, 구현
난이도
- 브론즈 1 / Bronze 1
마술사 이민혁 문제 요약
- 민혁이는 카드 뒷 면 전체를 디자인하지 않고, 왼쪽 위 1/4만 디자인한다. 그다음 대칭시켜 오른쪽 위를 만들고, 다시 대칭시켜서 아래 부분을 모두 만든다.
- 이렇게 대칭시켜서 전체를 디자인 한 이후에는, 마술 하는 데 사용하기 위한 의도된 에러를 넣는다. 에러는 원래 '#'이어야 하는 칸을 '.'로 바꾸거나 '.'이어야 하는 칸을 '#'로 바꾸는 것이다.
- 왼쪽 위의 디자인과 에러의 위치가 주어졌을 때, 카드 뒷 면 전체 디자인을 구하여 출력한다.
- 왼쪽 위 부분의 행의 개수 R과 열의 개수 C가 주어진다. (1 ≤ R, C ≤ 50)
- 에러의 위치 A와 B가 주어진다. (1 ≤ A ≤ 2R, 1 ≤ B ≤ 2C)
문제 풀이 과정
- 입력받은 왼쪽 위 부분의 디자인을 대칭시켜 오른쪽 위 부분을 완성한다.
- 윗부분을 대칭시켜 아래 부분을 완성한다.
- 이때 윗부분 행들을 단순히 아래 부분에 추가하면 일반 복사가 되어 에러 표시를 하면 윗부분과 아랫부분이 함께 바뀐다.
- 따라서 윗부분 행들을 copy.deepcopy를 사용하여 깊은 복사 하여 아래 부분에 추가해야 한다.
- 카드 뒷면의 모든 디자인을 완성했으므로 에러 위치를 찾아서 #은.으로,. 은 #으로 바꾼다.
- 카드 뒷 면 전체 디자인을 출력한다.
일반 복사 - 주소 값을 복사하는 것으로, 주소가 같으므로, 하나의 값을 변경하면 나머지 하나도 같이 변경된다.
얕은 복사 - 메모리 값을 복사한 것으로, 주소도 다르다. 하지만, 2차원 리스트의 경우 껍데기만 메모리가 2개인 것이다.
L [0]을 바꾸면 하나의 값만 바뀌지만, L [0][1]을 바꾸면 나머지 하나도 같이 변경된다.
깊은 복사 - 껍데기뿐 아니라 내부의 값까지 모두 복사되어 내부까지 메모리 값과 주소가 다르다. 따라서 어떤 값을 바꿔도 따로 바뀐다.
코드 및 설명
import copy
R, C = map(int, input().split())
card = []
for _ in range(R):
card.append(list(input()))
A, B = map(int, input().split())
# 오른쪽 위 부분 대칭
for i in range(R):
row = []
for j in range(C - 1, -1, -1):
row.append(card[i][j])
card[i].extend(row)
# 아래 부분 대칭
for i in range(R - 1, -1, -1):
row = copy.deepcopy(card[i]) # 깊은 복사
card.append(row)
# 에러 처리
if card[A - 1][B - 1] == '#':
card[A - 1][B - 1] = '.'
else:
card[A - 1][B - 1] = '#'
for c in card:
print(''.join(c))
python에서 어떤 상황에서 값이 같이 바뀌고 안 바뀌는지 몰랐는데, 깊은 복사, 얕은 복사에 대한 개념이었다. 자세히 공부해봐야겠다.
BaekJoon 백준 3023 마술사 이민혁 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다.
728x90
반응형
'Algorithm Problem Solving > BaekJoon' 카테고리의 다른 글
[BaekJoon] 백준 2160 그림 비교 (Python / 파이썬) (0) | 2021.08.24 |
---|---|
[BaekJoon] 백준 8595 히든 넘버 (Python / 파이썬) (0) | 2021.08.24 |
[BaekJoon] 백준 17363 우유가 넘어지면? (Python / 파이썬) (0) | 2021.08.23 |
[BaekJoon] 백준 3035 스캐너 (Python / 파이썬) (0) | 2021.08.23 |
[BaekJoon] 백준 2775 이번학기 평점은 몇점? (Python / 파이썬) (0) | 2021.08.23 |
댓글