https://www.codetree.ai/missions/2/problems/The-1D-wind-blows?utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
시뮬레이션 문제는 문제가 길어서 겁 먹게 된다,, 이 문제는 1차원 밀어내기 구현이라 어렵지 않았음
✅ 모듈화 연습하기 좋은 문제라고 생각함
✔️ 모듈화 잘해두면 실수를 금방 찾을 수 있음
✅ 메인 실행문
✔️ rn, drt 변수에 몇번째 행이 어떻게 바뀌는지 담는다
✔️ rn = row number / drt = direction
✔️ 재귀함수로 풀어야겠다고 로직을 짰기 때문에 visited 배열 들고 다님
✔️ 윗줄은 올라가면서 전파, 아랫줄은 내려가면서 전파되므로 서로 전파시키면 안 됨 => visited로 방지
n, m, q = map(int, input().split())
ground = [list(map(int, input().split())) for _ in range(n)]
for _ in range(q):
rm, drt = input().split()
rm = int(rm)-1
visited = [False]*n
change_row(rm, drt)
for i in range(n):
for j in ground[i]:
print(j, end=" ")
print()
✅ 모듈1 : check_direction
✔️ 이전 방향과 반대 방향으로 가야하므로 방향을 바꿔주는 기능
✅ 모듈2 : check_difference
✔️기준 row와 비교 row가 같은 열에 같은 숫자를 가지고 있는지 비교
✔️ 같은 숫자를 가지고 있으면 cnt 증가
✔️ cnt가 1 이상이면 True 반환함 (전파 영향 받음)
✅ 모듈3 : change_row
✔️ 방향에 밀어내기 진행하는 모듈
✔️ 다음 행이 전파에 영향을 받는지 안 받는지 판단하여 재귀함수 실행 => 완전탐색
def check_direction(prev_direction):
if prev_direction == "L":
return "R"
else:
return "L"
def change_row(row, direction):
visited[row] = True
if direction == "L":
temp1 = ground[row][m-1]
for i in range(m-1, 0, -1):
ground[row][i] = ground[row][i-1]
ground[row][0] = temp1
else:
temp1 = ground[row][0]
for i in range(m-1):
ground[row][i] = ground[row][i+1]
ground[row][m-1] = temp1
if row-1 >= 0 and not visited[row-1] and check_diffrence(row, row-1):
change_row(row-1, check_direction(direction))
if row+1 < n and not visited[row+1] and check_diffrence(row, row+1):
change_row(row+1, check_direction(direction))
def check_diffrence(row1, row2):
cnt = 0
for i in range(m):
if ground[row1][i] == ground[row2][i]:
cnt += 1
if cnt == 0:
return False
return True
n, m, q = map(int, input().split())
ground = [list(map(int, input().split())) for _ in range(n)]
for _ in range(q):
rm, drt = input().split()
rm = int(rm)-1
visited = [False]*n
change_row(rm, drt)
for i in range(n):
for j in ground[i]:
print(j, end=" ")
print()
[코드트리/INTERMEDIATE LOW] BFS K번 최댓값으로 이동하기 Python 파이썬 (0) | 2023.08.15 |
---|---|
[코드트리/INTERMEDIATE LOW] DFS 안전지대 Python 파이썬 (0) | 2023.08.09 |
[코드트리/INTERMEDIATE LOW] DP I 사각형 채우기 Python 파이썬 (0) | 2023.08.04 |
[코드트리/INTERMEDIATE LOW] DP I 계단 오르기 Python (0) | 2023.08.03 |
[코드트리/INTERMEDIATE LOW] Simulation 양수 직사각형 최대 크기 Python (0) | 2023.08.02 |