목록삼성 (15)
코딩 공부

파이어볼의 정보를 담을 리스트 fireballs를 만들고 각각의 파이어볼 정보를 fireballs에 저장하고 파이어볼들을 arr에 위치시킨다. fireballs에 담겨있는 파이어볼의 정보를 pop으로 하나씩 꺼내 다음 좌표를 구한다. 이때 좌표의 양끝, 즉 위와 아래, 오른쪽과 왼쪽이 이어지는 좌표 특성이 있음에 유의한다. 따라서 파이어볼의 위치를 N으로 나눠준다. (모든 fireballs의 다음 좌표를 구하고 나면, fireballs는 빈 리스트 상태가 된다.) 모든 좌표를 돌면서 하나의 파이어볼만 있는 좌표는 fireballs 리스트에 그대로 넣어준다. 2개 이상의 파이어볼이 있는 좌표는 문제에 따라 총질량, 총속력 등을 구해 생성될 파이어볼들의 질량과 속력을 구한다. 이때 총질량//5 == 0 이 ..

빈 칸인 공간들 중에 3칸을 뽑아서 벽을 만들기 위해 DFS를 이용한다. DFS의 효율을 높이기 위해 지금 선택한 벽의 개수가 3을 넘어가면 가지치기를 실행해준다. 3개의 후보를 뽑았다면, 3개의 후보를 벽 상태인 1로 만들어주고 BFS를 통해 바이러스를 퍼뜨리고 전체 연구실의 크기(N*M)에서 벽의 수(wall), 임시 벽(3), 바이러스가 퍼진 칸(len(virus)+count)을 빼주면 안전 영역의 크기를 구할 수 있어 이를 return 한다. 위의 과정에서 return 받은 값을 이용해 answer의 값을 안전 영역의 최댓값으로 갱신한다. 임시 벽을 다시 0인 상태로 되돌려준다. from collections import deque def dfs(n, lst): global answer if le..

'ㅜ' 모양을 제외한다면, 일반적인 dfs로 4칸을 차지하는 모양을 만들어 그 칸들의 합을 구한 뒤, answer을 sm의 최댓값으로 갱신한다. 'ㅜ' 모양을 따로 고려하여 answer을 갱신해준다. def dfs(n, ci, cj, sm): global answer if n == 4:# 4칸의 도형이 만들어졌다면 return answer = max(answer, sm) return for di, dj in ((-1, 0), (0, 1), (1, 0), (0, -1)): ni = ci + di nj = cj + dj if 0

삼차원 주사위를 굴린다고 생각하니 너무 어렵게 느껴져 전개도로 접근해봐야겠다. 동서남북마다 주사위의 상태를 정리하여 전개도를 그려본다. 3. 각 명령의 순서대로 주사위를 이동시키고, 범위에서 벗어나지 않을 경우에만 주사위의 좌표, 전개도를 바꾸고(change 함수 이용) 상황에 맞춰 바닥면 및 주사위면을 복사시키고, 주사위의 윗면을 출력한다. def change(d): # 주사위 전개도 변경 if d == 1: dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3] elif d == 2: dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4] elif d ==..

시뮬레이션 유형의 문제이므로 문제에서 설명한 그대로 구현하도록 한다. 사과가 있는 칸을 나타내기 위해 board에 주어진 사과 좌표를 이용해 1로 표기해둔다. 방향 전환 정보를 info라는 딕셔너리 형태(info = {X:C})에 담는다. 이때 X는 숫자, C는 문자 형태임에 유의한다. 한 칸 바라보고 있는 방향으로 이동하면서 벽이나 몸에 이동할 경우 반복문을 break하여 빠져나오고 사과가 있는 칸이라면 사과를 먹고(board[ni][nj] = 0) 몸을 늘린다. 사과가 없는 칸이라면 몸을 늘리고 꼬리를 당긴다(snake맨앞 정보 지우기). 기준 좌표를 재설정한다.(si, sj = ni, nj) info를 통해 방향을 바꿔야하는 turn인지 체크하고 해당 시 변경할 수 있도록 한다. N = int(in..

시뮬레이션 유형이므로 문제에 나와있는 과정 그대로 코드를 구상하도록 한다. 끝과 끝이 이어진 격자임을 고려하여 [1]번 과정에서 이동된 구름의 위치i, j를 각각 N으로 나눠준다. [2]번 과정에서는 위에서 구한 이동된 구름(new_cloud)의 위치에 비의 양을 +1 해준다. [3]번 과정(구름 사라짐)은 따로 구현할 것은 없고, 이후 과정에서 구름의 위치들이 사용되므로 지우지 않음에 유의한다. [4]번 과정에서는 각 구름 좌표의 대각선에 물이 들어있는 바구니 수(count)를 세야하므로 ↖,↗,↙,↘ 방향의 물 존재 여부를 카운트하여 각 좌표의 물의 양에 값을 물이 들어있는 바구니 수를 더해준다. [5]번 과정에서 구름을 새로 생성해야 하므로 좌표의 값이 2이상(arr[i][j]>=2), 좌표가 ne..