N = int(input())
nums = list(map(int, input().split()))
B, C = map(int, input().split())
result = 0
nums = [nums[i]-B for i in range(N)]
result += N
for n in nums:
if n > 0:
result += (n // C)
if n % C != 0:
result += 1
print(result)
import collections
# 북, 동, 남, 서
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def change(d):
if d == 0: # 북 -> 서
return 3
elif d == 1: # 동 -> 북
return 0
elif d == 2: # 남 -> 동
return 1
elif d == 3: # 서 -> 동
return 2
def search(x, y, d):
cnt = 1
q = collections.deque([[x, y, d]])
route[x][y] = 2
while q:
x, y, d = q.popleft()
nd = d
for i in range(4):
# 왼쪽 영역 탐색
nd = change(nd)
nx = x + dx[nd]
ny = y + dy[nd]
# a
if 0 <= nx < N and 0 <= ny < M and route[nx][ny] == 0:
cnt += 1
route[nx][ny] = 2
q.append([nx, ny, nd])
break
# c
elif i == 3:
if d == 0:
x += 1
elif d == 1:
y -= 1
elif d == 2:
x -= 1
elif d == 3:
y += 1
q.append([x, y, d])
# d
if route[x][y] == 1:
return cnt
N, M = map(int, input().split())
r, c, d = map(int, input().split())
route = [list(map(int, input().split())) for _ in range(N)]
print(search(r, c, d))
import copy
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
answer = 0
def bfs():
global answer
v = copy.deepcopy(virus) # 원본 유지한채 복사(바이러스 좌표값)
tmp = [[0]*M for _ in range(N)]
# 지도 복사
for i in range(N):
for j in range(M):
tmp[i][j] = maps[i][j]
# 4방향 탐색 후 바이러스 감염
while len(v) != 0:
vir = v.pop()
vir_x = vir[0]
vir_y = vir[1]
for k in range(4):
nx = vir_x + dx[k]
ny = vir_y + dy[k]
if 0 <= nx < N and 0 <= ny < M:
if tmp[nx][ny] == 0:
tmp[nx][ny] = 2
v.append([nx, ny])
# 0(안전구역) 갯수 파악
result = 0
for i in tmp:
for j in i:
if j == 0:
result += 1
answer = max(result, answer)
# 벽 3개를 세우는 모든 경우의 수
def wall(cnt):
if cnt == 3:
bfs()
return
for i in range(N):
for j in range(M):
if maps[i][j] == 0:
maps[i][j] = 1
wall(cnt+1)
maps[i][j] = 0
N, M = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(N)]
virus = []
# 바이러스 좌표값 저장
for i in range(N):
for j in range(M):
if maps[i][j] == 2:
virus.append([i, j])
wall(0)
print(answer)
벽 3개를 세우는 방법을 알지 못해 다른 사람들의 코드를 참고했다. 여기서 입력의 크기가 크지 않기 때문에 브루트포스를 사용해 벽3개를 세우는 경우의 수를 다 구했다. 모든 경우의 수를 구하는 코드를 이해하는데 쉽지 않았다..
N, M, x, y, K = map(int, input().split())
maps = [list(map(int, input().split())) for _ in range(N)]
op = list(map(int, input().split()))
dice = [0]*7
# 항상 주사위 6번면이 위에 오도록 설정
def move(op):
if op == 1:
dice[1], dice[3], dice[4], dice[6] = dice[3], dice[6], dice[1], dice[4]
elif op == 2:
dice[1], dice[3], dice[4], dice[6] = dice[4], dice[1], dice[6], dice[3]
elif op == 3:
dice[1], dice[2], dice[5], dice[6] = dice[2], dice[6], dice[1], dice[5]
elif op == 4:
dice[1], dice[2], dice[5], dice[6] = dice[5], dice[1], dice[6], dice[2]
# 명령에 따라 지도에서 주사위 이동
def direction(op):
if op == 1:
return (0, 1)
elif op == 2:
return (0, -1)
elif op == 3:
return (-1, 0)
elif op == 4:
return (1, 0)
for i in op:
row, col = direction(i)
if 0 <= x+row < N and 0 <= y+col < M:
x += row
y += col
move(i)
# 해당 지도 좌표의 값이 0인지 판단
if maps[x][y] != 0:
# 바닥면이 지도의 값이 된다
dice[1] = maps[x][y]
maps[x][y] = 0
else:
# 지도의 값이 주사위 바닥면 값이 된다
maps[x][y] = dice[1]
print(dice[6])
특별한 알고리즘이 필요없는 문제다. 구현, 시뮬레이션 문제인데 이런 유형을 많이 풀어보지 않아 쉽지 않았다.