본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 23290 마법사

 

첫 40분 풀이 실패.. 인 듯.. 애초에 능력도 안 되면서 시간 제한을 너무 빡빡하게 잡았나..? ㅋㅋㅋ

우선 집중이 잘 안 돼서 문제 정리하는 데 오래 걸렸다.. 시험 잡히자마자 계속 이 상태다.. 긴장과 불안 때문에 문제가 안 읽혀.. 😥 멘탈의 문제라기보다는 실력의 문제인 것 같기는 하다.. 경험치 부족.. 아 한 달만 있다가 시험 보면 좋겠다 ㅋㅋㅋ

 

하여간 좌표 안에 데이터로 방향 정보를 거의 사용 안 하고 만들어나가다가 3번 조건 사전 순 변환 설명 보고 얼씨구..? 이것봐라? 내 풀이는 다른 방향인데..? 하고 멈춰버렸다. 한 번 망했을 때 다시 부딪힐 용기!!가 필요한데 최근에 풀이 찾아보는게 습관이 되어서 그런가 너무 하기 싫다. 진짜 요즘 근성제로.. 혹은 마이너스 ^^ ... 돌아왕~

 

뭐 시험시간도 늘었다는데, 딱 한 번만 더 부딪혀봅시다 이 문제! 일단 아래 풀이는 메모.

############
#포기한 풀이#
############
import copy
m, s = map(int, input().split())
board = [[0]*4 for _ in range(4)]
fishes = [list(map(int, input().split())) for _ in range(m)]
for fish in fishes:
  x, y, d = fish
  board[x][y] += 1
shark_x, shark_y = map(int, input().split())
fish_count = m

dx = [0, -1, -1, -1, 0, 1, 1, 1]
dy = [-1, -1, 0, 1, 1, 1, 0, -1]

for _ in range(s):
  #1 복제마법. #5에서 결과 나타남
  coppied_fishes = copy.deepcopy(fishes)
  
  #2 물고기 이동 
  new_fishes = []
  for fish in fishes:
    x, y, d = fish
    move_possibility = False
    for i in range(8):
      nx = x + dx[(d+i)%8]
      ny = y + dy[(d+i)%8]

      if 0 <= nx < 4 and 0 <= ny < 4 and nx != shark_x and ny != shark_y and board[nx][ny] == 10: #물고기냄새:10
        move_possibility = True
        board[x][y] -= 1
        board[nx][ny] += 1
        new_fishes.append((nx, ny, (d+i)%8))
        break
    if move_possibility == False:
      new_fishes.append((x, y, d))
  fishes = new_fishes

  #3 상어 이동
  shark_move_possibility = False
  remove_list = []
  for i in range(8):
    remove = []
    for k in range(3):
      shark_nx = x + dx[(d+i)%8]
      shark_ny = y + dy[(d+i)%8]

      if 0 <= nx < 4 and 0 <= ny < 4:
        if board[nx][ny] :
          shark_move_possibility = True
          remove.append((nx, ny))
      else:
        shark_move_possibility = False
        remove = []
    if shark_move_possibility:
      if len(remove_list) < len(remove):
        remove_list = remove
      elif len(remove_list) == len(remove):
        # 사전순 변환: 방향대로
  #4

  #5 복제마법 완료
  fishes.append(coppied_fishes)

 

다시 실패. 

히히

 

그리고 풀이 보고 따라 풀어보고 마쳤다.

실력 늘리고 다시 풀어보자.