[SWEA]
간단한 369게임
N = int(input())
for i in range(1, N+1):
flag = False
if '3' in str(i) or '6' in str(i) or '9' in str(i):
flag = True
for j in str(i):
if '3' in j or '6' in j or '9' in j:
print('-', end='')
elif not flag:
print(j, end='')
print('', end = ' ')
퍼펙트 셔플 ❤️
T = int(input())
for tc in range(1, T+1):
N = int(input())
card = list(input().split())
if N % 2 == 0:
c1 = card[:N//2]
c2 = card[N//2:]
else:
c1 = card[:N//2+1]
c2 = card[N//2+1:]
result = []
while c1 or c2:
if c1:
result.append(c1.pop(0))
if c2:
result.append(c2.pop(0))
print(f'#{tc}', *result)
풍선팡3
T = int(input())
for tc in range(1, T+1):
n = int(input())
balloon = [list(map(int, input().split())) for _ in range(n)]
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
result_list = []
for i in range(n):
for j in range(n):
result = balloon[i][j]
for k in range(4):
nx, ny = i + dx[k], j + dy[k]
for _ in range(balloon[i][j]):
if 0 <= nx < n and 0 <= ny < n:
result += balloon[nx][ny]
nx += dx[k]
ny += dy[k]
result_list.append(result)
print(f'#{tc}', max(result_list)-min(result_list))
정곤이의 단조증가하는 수
T = int(input())
for tc in range(1, T + 1):
N = int(input())
arr = list(map(int, input().split()))
multi_lst = []
danjo = []
for i in range(N - 1):
for j in range(i + 1, N):
multi_lst.append(arr[i] * arr[j])
for k in multi_lst:
K = str(k)
result = True
for j in range(0, len(K) - 1):
if K[j] > K[j + 1]:
result = False
if result:
danjo.append(k)
if len(danjo) == 0:
print(f'#{tc}', -1)
else:
print(f'#{tc}', max(danjo))
오목 판정 ❤️
def check():
#오른쪽, 아래, 오른쪽 아래 대각선, 왼쪽 아래 대각선
dx = [0,1,1,1]
dy = [1,0,1,-1]
for i in range(N):
for j in range(N):
if board[i][j] == 'o':
for dir in range(4):
nx, ny = i, j
cnt = 0
while 0 <= nx < N and 0 <= ny < N and board[nx][ny] == 'o':
cnt += 1
nx += dx[dir]
ny += dy[dir]
if cnt >= 5:
return 'YES'
return 'NO'
T = int(input())
for tc in range(1, T+1):
N = int(input())
board = [list(input()) for _ in range(N)]
print(f'#{tc}', check())
원재의 메모리 복구하기
T = int(input())
for tc in range(1, T+1):
n = list(input())
result = 0
origin = [0] * len(n)
for i in range(len(origin)):
if int(n[i]) != origin[i]:
for j in range(i, len(origin)):
origin[j] = int(n[i])
result += 1
else:
continue
print(f'#{tc} {result}')
농작물 수확하기 ❤️
T = int(input())
for tc in range(1, T+1):
n = int(input())
farm = [list(map(int, input())) for _ in range(n)]
total = 0
mid = (n-1) // 2
for i in range(n):
if i <= mid:
total += sum(farm[i][mid-i:mid+1+i])
else:
total += sum(farm[i][i-mid:mid-i])
print(f'#{tc} {total}')
어디에 단어가 들어갈 수 있을까
T = int(input())
for tc in range(1, T+1):
n, k = map(int, input().split())
puzzle = [list(map(int, input().split())) for _ in range(n)]
result = 0
for i in range(n):
row_cnt = 0
for j in range(n):
if puzzle[i][j] == 1:
row_cnt += 1
if puzzle[i][j] == 0 or j == n - 1:
if row_cnt == k:
result += 1
row_cnt = 0
for i in range(n):
col_cnt = 0
for j in range(n):
if puzzle[j][i] == 1:
col_cnt += 1
if puzzle[j][i] == 0 or j == n - 1:
if col_cnt == k:
result += 1
col_cnt = 0
print(f'#{tc} {result}')
삼성시의 버스노선 ❤️
T = int(input()) # 테스트 케이스 개수
for test_case in range(1, T + 1):
N = int(input())
bus_station = [0] * 5001
for i in range(N):
Ai, Bi = map(int, input().split())
for i in range(Ai, Bi + 1):
bus_station[i] += 1
P = int(input())
result = [0] * (P + 1)
for i in range(1, P + 1):
result[i] = bus_station[int(input())]
print(f'#{test_case}', *result[1:])
파리퇴치3 ❤️
def catch_pari(x, y, dx, dy):
global mx_val
total = arr[y][x]
for i in range(4):
for j in range(1, M):
nx = x + dx[i] * j
ny = y + dy[i] * j
if nx < 0 or ny < 0 or N <= nx or N <= ny: #범위 넘는 건 고려 x
continue
else:
total += arr[ny][nx]
if mx_val < total:
mx_val = total
return
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
# + 모양
dx = [-1,1,0,0]
dy = [0,0,-1,1]
# x 모양
dx2 = [-1,1,-1,1]
dy2 = [-1,1,1,-1]
mx_val = 0
for i in range(N):
for j in range(N):
catch_pari(i, j, dx, dy)
catch_pari(i, j, dx2, dy2)
print(f'#{tc} {mx_val}')
세제곱근을 찾아라
T = int(input())
for tc in range(1, T+1):
N = int(input())
start = 1
end = N
result = -1
while start <= end:
mid = (start + end) // 2
if N == mid ** 3:
result = mid
break
elif N < mid ** 3:
end = mid -1
else:
start = mid + 1
print(f'#{tc} {result}')
쇠막대기 자르기
T = int(input())
for tc in range(1,T+1):
lst = input() # 쇠 막대기 & 레이저 정보 입력
result = 0 # 잘린 막대기 개수
cnt = 0 # 쌓여있는 막대기 개수
for i in range(len(lst)):
if lst[i] == '(': #막대기 추가
cnt += 1
else: # ')'
cnt -= 1
if lst[i-1] == '(': # 레이저
result += cnt
else: # 막대기 끝
result += 1
print(f'#{tc} {result}')
스도쿠 검증
T = int(input())
for tc in range(1, T+1):
sudoku = [list(map(int, input().split())) for _ in range(9)]
result = 1
for i in range(9):
row_check = [0] * 10 #행 검사
col_check = [0] * 10 #열 검사
for j in range(9):
row_check[sudoku[i][j]] += 1
if row_check[sudoku[i][j]] == 2:
result = 0
col_check[sudoku[j][i]] += 1
if col_check[sudoku[j][i]] == 2:
result = 0
for a in range(0, 9, 3):
for b in range(0, 9, 3):
three_check = [0] * 10
for x in range(3):
for y in range(3):
three_check[sudoku[a+x][b+y]] += 1
if three_check[sudoku[a+x][b+y]] == 2:
result = 0
print(f'#{tc} {result}')
진기의 최고급 붕어빵
T = int(input())
for tc in range(1, T+1):
N, M, K = map(int, input().split())
arrive = list(map(int, input().split()))
arrive.sort()
flag = 'Possible'
for i in range(N):
fish = arrive[i] // M * K - (i+1)
if fish < 0:
flag = 'Impossible'
print(f'#{tc} {flag}')
백만장자 프로젝트
T = int(input()) #테스트 케이스 개수 입력
for tc in range(1, T+1):
N = int(input())
cost_lst = list(map(int, input().split()))
mx = cost_lst[-1] #마지막 원소를 임시 최대값으로 설정
total = 0 #최대 이익을 저장할 변수
for i in range(N-2, -1, -1): #뒤에서 두번째 원소부터 첫 원소까지 거꾸로 순회하면서,
if cost_lst[i] >= mx:
mx = cost_lst[i]
else:
total += mx - cost_lst[i]
화물 도크
T = int(input())
for tc in range(1, T+1):
N = int(input())
time = [list(map(int, input().split())) for _ in range(N)]
time.sort(key = lambda x: x[1], reverse=True)
ans = 1
end = time.pop()[1]
while time:
s, e = time.pop()
if end <= s:
end = e
ans += 1
print(f'#{tc} {ans}')
컨테이너 운반
for tc in range(1, int(input()) + 1):
n, m = map(int, input().split())
containers = list(map(int, input().split()))
trucks = list(map(int, input().split()))
containers.sort(reverse=True)
trucks.sort(reverse=True)
c, t = 0, 0
total = 0
while c < n and t < m:
if trucks[t] >= containers[c]:
total += containers[c]
t += 1
c += 1
print(f'#{tc} {total}')
전자카트
def calc(path):
total = energy[0][path[0]-1] + energy[path[-1]-1][0]
for i in range(len(path)-1):
total += energy[path[i] - 1][path[i + 1] - 1]
possible_lst.append(total)
def move(x):
if x == N-1:
calc(path)
return
for i in range(2, N+1):
if used[i] == True:
continue
used[i] = True
path.append(i)
move(x+1)
path.pop()
used[i] = False
T = int(input())
for tc in range(1, T+1):
N = int(input())
energy = [list(map(int, input().split())) for _ in range(N)]
path = []
used = [False for _ in range(N + 1)]
possible_lst = []
move(0)
print(f'#{tc}', min(possible_lst))
Magnetic
T = 10
for tc in range(1, T+1):
N = int(input())
table = [list(map(int, input().split())) for _ in range(N)]
cnt = 0
for i in range(N):
red_flag = False
for j in range(N):
if table[j][i] == 1:
red_flag = True
if table[j][i] == 2 and red_flag:
cnt += 1
red_flag = False
print(f'#{tc}', cnt)
미로1
from collections import deque
def bfs(x, y):
q.append((x, y))
visited[x][y] = True
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if x < 0 or y < 0 or nx >= N or ny >= N or visited[nx][ny] or maze[nx][ny] == 1:
continue
if maze[nx][ny] == 3:
return True
visited[nx][ny] = True
q.append((nx, ny))
return False
N = 16
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for _ in range(10):
q = deque()
tc = int(input())
maze = [list(map(int, input().rstrip())) for _ in range(N)]
visited = [[False] * N for _ in range(N)]
for i in range(N):
for j in range(N):
if maze[i][j] == 2:
x = i
y = j
break
result = bfs(x, y)
print(f'#{tc} {int(result)}')
자기 방으로 돌아가기
T = int(input())
for tc in range(1, T+1):
N = int(input())
room = [list(map(int, input().split())) for _ in range(N)] # [ [출발지점, 도착지점] ]
cnt_lst = [0] * 202
for r in room:
if r[0] < r[1]:
start = (r[0] + 1) // 2
end = (r[1] + 1) // 2
else:
start = (r[1] + 1) // 2
end = (r[0] + 1) // 2
for i in range(start, end+1):
cnt_lst[i] += 1
result = max(cnt_lst)
print(f'#{tc} {result}')
재밌는 오셀로 게임
T = int(input())
dir = [(0, 1), (1, 0), (-1, 0), (0, -1), (1, 1), (-1, 1), (1, -1), (-1, -1)] #상하좌우, 대각선 8방향
for tc in range(1, T+1):
n, m = map(int, input().split()) #n: 한 변의 길이, m: 돌을 놓는 횟수
board = [[0] * n for _ in range(n)] #n*n 보드판 0으로 초기화
#초기 바둑돌 세팅
board[n//2][n//2] = 2 #W
board[n//2-1][n//2-1] = 2 #W
board[n//2-1][n//2] = 1 #B
board[n//2][n//2-1] = 1 #B
for _ in range(m):
x, y, color = map(int, input().split())
x, y = x-1, y-1 #index값이므로 -1씩 해줌
data = []
for i in range(8):
dx, dy = dir[i]
nx = x + dx
ny = y + dy
while True:
if not (0 <= nx < n and 0 <= ny < n): #board 범위를 벗어나는 경우, data 리스트 초기화해주고 break
data = []
break
if board[nx][ny] == 0: #빈 칸일 경우, data 리스트 초기화해주고 break
data = []
break
if board[nx][ny] == color: #현재 돌과 같은 색의 돌일 경우 break
break
else: #현재 돌과 다른 색의 돌일 경우 data 리스트에 (nx, ny) append
data.append((nx, ny))
nx, ny = nx + dx, ny + dy #다음 인접한 칸 확인
# 같은 색의 돌로 바꾸기
for tx, ty in data:
if color == 1:
board[tx][ty] = 1
elif color == 2:
board[tx][ty] = 2
board[x][y] = color
ww, bb = 0, 0
for i in range(n):
ww += board[i].count(2)
bb += board[i].count(1)
print(f'#{tc} {bb} {ww}')
View
T = 10
for tc in range(1, T + 1):
N = int(input())
buildings = list(map(int, input().split()))
cnt = 0
for i in range(2, N - 2):
me_height = buildings[i]
mx_other_height = max(buildings[i-2], buildings[i-1], buildings[i+1], buildings[i+2])
if me_height > mx_other_height:
cnt += me_height - mx_other_height
print(f'#{tc} {cnt}')
Flatten
for test_case in range(1, 11):
M = int(input())
boxes = list(map(int, input().split()))
for _ in range(M):
boxes.sort()
#최고점과 최저점의 높이 차가 1 이하라면, 반복을 중지
if boxes[-1] - boxes[0] <= 1:
break
boxes[-1] -= 1
boxes[0] += 1
print(f'#{test_case} {max(boxes) - min(boxes)}')
달팽이 숫자
di = [0, 1, 0, -1]
dj = [1, 0, -1, 0]
T = int(input())
for test_case in range(1, T+1):
N = int(input())
lst = [[0]*N for _ in range(N)]
cnt = 1
i, j = 0, 0
dr = 0
while True:
lst[i][j] = cnt
if cnt == N * N:
break
ni = i + di[dr]
nj = j + dj[dr]
if 0 > ni or N <= ni or 0 > nj or N <= nj or lst[ni][nj] != 0:
dr = (dr + 1) % 4
continue
i, j = ni, nj
cnt += 1
print(f'#{test_case}')
for i in range(N):
print(*lst[i])
Sum
for test_case in range(1,11):
input()
lst = [list(map(int,input().split())) for _ in range(100)]
sum = [0]*202
for i in range(100):
sum[200] += lst[i][i] # 대각선1
sum[201] += lst[i][99-i] # 대각선2
for j in range(100):
sum[i] += lst[i][j] # 가로
sum[i+100] += lst[j][i] # 세로
print(f'#{test_case} {max(sum)}')
전기 버스
T = int(input())
# K = 한번 충전으로 최대한 이동할 수 있는 정류장 수
# 0번 정류장부터 N번 정류장까지
# M = 충전기가 설치된 정류장 수
for test_case in range(1, T+1):
K, N, M = list(map(int, input().split()))
charge_station = list(map(int, input().split())) # 충전기가 설치된 정류장 번호들
cnt = 0
current = 0
while current + K < N:
found_station = False
for i in range(K, 0, -1):
if current + i in charge_station:
current += i
cnt += 1
found_station = True
break
if found_station == False:
cnt = 0
break
ladder1
for test_case in range(1, 11):
tc = int(input())
arr = [list(map(int, input().split())) for _ in range(100)]
i, j = 99, arr[99].index(2)
path = [[0] * 100 for _ in range(100)]
while i != 0:
path[i][j] = 1
if j - 1 >= 0 and arr[i][j-1] and path[i][j-1] == 0:
j -= 1
continue
elif j + 1 <= 99 and arr[i][j+1] and path[i][j+1] == 0:
j += 1
continue
else:
i -= 1
result = j
print(f'#{tc} {result}')
ladder2
T = 10
for _ in range(T):
tc = int(input())
N = 100
ladder = [list(map(int, input().split())) for _ in range(N)]
mn = float('inf')
result = 0
for i in range(N):
if ladder[0][i] == 1: #시작지점 찾기
x, y = 0, i
cnt = 0
while x < 99:
x += 1
cnt += 1
if y > 0 and ladder[x][y-1] == 1:
while y > 0 and ladder[x][y-1] == 1:
y -= 1
cnt += 1
elif y < 99 and ladder[x][y+1] == 1:
while y < 99 and ladder[x][y+1] == 1:
y += 1
cnt += 1
if mn > cnt:
mn = cnt
result = i
print(f'#{tc} {result}')
영준이의 카드 카운팅
for tc in range(1, int(input())+1):
card = input()
check = []
card_set = {'S': 13, 'D': 13, 'H': 13, 'C': 13}
for i in range(0, len(card), 3):
check.append(card[i:i+3])
if len(check) != len(set(check)):
print(f'#{tc} ERROR')
else:
for i in range(0, len(card)-2, 3):
num = card_set[card[i]] - 1
card_set[card[i]] = num
print(f'#{tc}', end=' ')
print(*card_set.values())
숫자배열 회전
T = int(input())
for test_case in range(1, T+1):
N = int(input())
lst = [list(map(int, input().split())) for _ in range(N)]
lst_90 = [[0]*N for _ in range(N)]
lst_180 = [[0] * N for _ in range(N)]
lst_270 = [[0] * N for _ in range(N)]
for i in range(N):
for j in range(N):
lst_90[i][j] = lst[N-1-j][i]
for i in range(N):
for j in range(N):
lst_180[i][j] = lst_90[N-1-j][i]
for i in range(N):
for j in range(N):
lst_270[i][j] = lst_180[N-1-j][i]
print(f'#{test_case} ')
for i in range(N):
for x in range(N):
print(lst_90[i][x], end='')
print(end=' ')
for y in range(N):
print(lst_180[i][y], end='')
print(end=' ')
for z in range(N):
print(lst_270[i][z], end='')
print()
회문2
import sys
sys.stdin = open('input.txt', 'r')
def palindrome(m, arr):
for i in range(100):
for j in range(0, 100-m+1):
if arr[i][j] == arr[i][j+m-1]:
for k in range(1, m//2):
if arr[i][j+k] != arr[i][j+m-1-k]:
break
else:
return True
for j in range(0, 100-m+1):
if arr[j][i] == arr[j+m-1][i]:
for k in range(1, m//2):
if arr[j+k][i] != arr[j+m-1-k][i]:
break
else:
return True
return False
T = 10
for _ in range(T):
tc = int(input())
arr = [list(input()) for _ in range(100)]
for m in range(100, -1, -1):
if palindrome(m, arr):
print(f'#{tc} {m}')
break
수의 새로운 연산
dct = {}
r_dct = {}
i, j = 1, 1
for n in range(1, 50000):
dct[n] = (i, j)
r_dct[(i, j)] = n
i, j = i-1, j+1
if i < 1:
i, j = j, 1
T = int(input())
for tc in range(1, T+1):
p, q = map(int, input().split())
pi, pj = dct[p] # 1. p, q값의 좌표로 변환
qi, qj = dct[q]
ans = r_dct[(pi+qi, pj+qj)] # 2. 좌표를 값으로 변환
print(f'#{tc} {ans}')
러시아 국기같은 깃발
#3중 for문을 어떻게 쓸까 ??!?!
T = int(input())
for tc in range(1, T+1):
n, m = map(int, input().split())
arr = [list(input()) for _ in range(n)]
mn = n * m
cnt = 0
for w in range(0, n-2): #white
for i in range(0, m):
if arr[w][i] != 'W':
cnt += 1
cnt2 = 0
for b in range(w+1, n-1): #blue
for i in range(0, m):
if arr[b][i] != 'B':
cnt2 += 1
cnt3 = 0
for r in range(b+1, n): #red
for i in range(0, m):
if arr[r][i] != 'R':
cnt3 += 1
total = cnt + cnt2 + cnt3
if mn > total:
mn = total
print(f'#{tc} {mn}')
[백준]
2798 블랙잭
N, M = map(int, input().split())
card_input = list(input().split())
sum = 0
sum_lst = []
for i in range(N):
for j in range(N):
for k in range(N):
if i != j and j != k and i != k:
sum_lst.append(int(card_input[i]) + int(card_input[j]) + int(card_input[k]))
possible_num_lst = []
for i in set(sum_lst):
if i <= M:
possible_num_lst.append(i)
print(max(possible_num_lst))
2309 일곱난쟁이
arr = []
for i in range(9):
arr.append(int(input()))
arr.sort() #정렬
sum = sum(arr)
ans_lst = []
for i in range(len(arr)):
for j in range(i+1, len(arr)):
if sum - arr[i] - arr[j] == 100:
for k in range(len(arr)):
if k == i or k == j:
continue
else:
print(arr[k])
exit()
2563 색종이
arr = [[0] * 1001 for _ in range(1001)]
N = int(input())
for a in range(1, N+1):
x, y, w, h = map(int, input().split())
for i in range(x, x+w):
for j in range(y, y+h):
arr[i][j] = a
for s in range(1, N+1):
cnt = 0
for i in range(1001):
for j in range(1001):
if arr[i][j] == s:
cnt += 1
print(cnt)
2567 색종이2
paper = int(input())
arr = [[0] * 102 for _ in range(102)]
dx = [-1,1,0,0]
dy = [0,0,1,-1]
for _ in range(paper):
left, under = map(int, input().split())
for i in range(left, left+10):
for j in range(under, under+10):
arr[i][j] = 1
cnt = 0
for i in range(1, 101):
for j in range(1, 101):
if arr[i][j] == 1:
for dir in range(4):
nx = i + dx[dir]
ny = j + dy[dir]
if arr[nx][ny] == 0:
cnt += 1
print(cnt)
8320 직사각형을 만드는 방법
n = int(input())
result = 0
for i in range(1, n+1):
for j in range(i, n//i+1):
result += 1
print(result)
2628 종이 자르기
hor, ver = map(int, input().split())
hor = [0, hor] #[0, 10]
ver = [0, ver] #[0, 8]
cut = int(input())
for _ in range(cut):
dir, num = map(int, input().split())
if dir == 0: #가로로 자르기
ver.append(num)
elif dir == 1: #세로로 자르기
hor.append(num)
hor.sort()
ver.sort()
ans = 0
for i in range(len(hor)-1):
for j in range(len(ver)-1):
ans = max(ans, (ver[j+1] - ver[j]) * (hor[i+1] - hor[i]))
print(ans)
2605 줄 세우기
N = int(input())
orders = list(map(int, input().split()))
stack = []
tmp = []
stack.append(1)
for n in range(2, N+1):
for _ in range(orders[n-1]):
tmp.append(stack.pop())
stack.append(n)
while tmp:
stack.append(tmp.pop())
print(*stack)
10431 줄세우기
P = int(input())
for _ in range(P):
height = list(map(int, input().split()))
stack = []
cnt = 0
for i in range(1, len(height)-1):
stack.append(height[i])
stack.sort()
if stack[-1] > height[i+1]:
for j in stack:
if height[i+1] < j:
cnt += 1
print(height[0], cnt)
3985 롤 케이크
L = int(input()) #롤케이크 길이
N = int(input()) #방청객 수
rollcake = [0] * (L+1)
lst = []
for i in range(1, N+1):
p, k = map(int, input().split())
lst.append(k+1-p)
for j in range(p, k+1):
if rollcake[j] == 0:
rollcake[j] = i
lst2 = []
for i in range(1, N+1):
c = rollcake.count(i)
lst2.append(c)
print(lst.index(max(lst)) + 1) #가장 많은 조각을 받을 것으로 기대하고 있던 방청객 번호
print(lst2.index(max(lst2)) + 1) #실제로 가장 많은 조각을 받은 방청객 번호
10157 자리 배정
C, R = map(int, input().split()) #공연장의 격자 크기
K = int(input()) #대기번호
hall = [[0] * C for _ in range(R)]
#위-오른쪽-아래-왼쪽
dx = [-1,0,1,0]
dy = [0,1,0,-1]
cnt = 1
k = 0
sx = R-1
sy = 0
hall[sx][sy] = 1
while True:
#기저조건
if cnt == C * R:
break
nx = sx + dx[k]
ny = sy + dy[k]
if 0 <= nx < R and 0 <= ny < C and hall[nx][ny] == 0:
cnt += 1
hall[nx][ny] = cnt
sx = nx
sy = ny
else:
k += 1
if k >= 4:
k = k % 4
for i in range(R):
for j in range(C):
if hall[i][j] == K:
print(j+1, R-i)
if K > C * R:
print(0)
2578 빙고
bingo = [list(map(int, input().split())) for _ in range(5)]
nums = [list(map(int, input().split())) for _ in range(5)]
cnt = 0
dx = [0,1,1,1]
dy = [1,0,-1,1]
def check_bingo(bingo):
result = 0
for i in range(5):
for j in range(5):
if bingo[i][j] == 0:
for dir in range(4):
ni = i
nj = j
cnt = 0
while 0 <= ni < 5 and 0 <= nj < 5 and bingo[ni][nj] == 0:
cnt += 1
ni += dx[dir]
nj += dy[dir]
if cnt == 5:
result += 1
if result >= 3:
return True
else:
return False
for i in range(5):
for j in range(5):
num = nums[i][j]
for x in range(5):
for y in range(5):
if num == bingo[x][y]:
bingo[x][y] = 0
cnt += 1
if check_bingo(bingo):
print(cnt)
exit()
10709 기상 캐스터
H, W = map(int, input().split())
weather = [input() for _ in range(H)]
for a in weather:
lst = [-1 for _ in range(W)]
for i in range(W):
if a[i] == 'c':
lst[i] = 0
tmp = 0
for i in range(1, W):
if lst[i] == 0:
tmp = 0
if lst[i - 1] != -1:
if lst[i] != 0:
tmp += 1
lst[i] = tmp
print(*lst)
2980 도로와 신호등
n , l = map(int,input().split()) #신호등 개수, 도로의 길이
now = 0
total = 0
for _ in range(n):
d, r, g = map(int,input().split()) #위치, 빨간불, 초록불
total += d - now
now = d
if total % (r + g) <= r :
total += r - total % (r + g)
total += l - now
print(total)
2839 설탕 배달
N = int(input())
if N % 5 == 0: # N이 5의 배수인 경우
print(N // 5)
else:
cnt = 0
while N > 0:
N -= 3
cnt += 1
if N % 5 == 0: # 5kg, 3kg 조합해서 담을 수 있는 경우
cnt += N // 5
print(cnt)
break
elif N == 1 or N == 2: # 5kg, 3kg로 나눌 수 없는 경우
print(-1)
break
elif N == 0: # N이 3의 배수인 경우
print(cnt)
break
1063 킹
king, stone, move_num = input().split()
move = {'R':(0,1), 'L':(0,-1), 'B':(1,0), 'T':(-1,0), 'RT':(-1,1), 'LT':(-1,-1), 'RB':(1,1), 'LB':(1,-1)}
chess = ['A','B','C','D','E','F','G','H'] #가로 위치값
kx, ky = (8-int(king[1])), chess.index(king[0])
sx, sy = (8-int(stone[1])), chess.index(stone[0])
for _ in range(int(move_num)):
command = input()
x, y = move[command]
if 0 <= kx + x < 8 and 0 <= ky + y < 8:
kx, ky = kx + x, ky + y
if kx == sx and ky == sy:
sx, sy = sx + x, sy + y
if not (0 <= sx < 8 and 0 <= sy < 8):
kx, ky = kx - x, ky - y
sx, sy = sx - x, sy - y
print(chess[ky], 8-kx, sep='')
print(chess[sy], 8-sx, sep='')
3085 사탕 게임
def cnt_mx():
row_cnt = col_cnt = 1
row_max = col_max = 0
for i in range(N):
for j in range(N-1):
if arr[i][j] == arr[i][j+1]:
row_cnt += 1
else:
row_cnt = 1
row_max = max(row_cnt, row_max)
row_cnt = 1
for j in range(N):
for i in range(N-1):
if arr[i][j] == arr[i+1][j]:
col_cnt += 1
else:
col_cnt = 1
col_max = max(col_cnt, col_max)
col_cnt = 1
ans = max(row_max, col_max)
return ans
N = int(input())
arr = [list(input()) for _ in range(N)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
result = 0
for i in range(N):
for j in range(N):
for dir in range(4):
nx = i + dx[dir]
ny = j + dy[dir]
if not (0 <= nx < N and 0 <= ny < N):
break
if arr[i][j] != arr[nx][ny]:
arr[i][j], arr[nx][ny] = arr[nx][ny], arr[i][j]
result = max(result, cnt_mx())
arr[i][j], arr[nx][ny] = arr[nx][ny], arr[i][j]
print(result)
2559 수열
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
temp_lst = list(map(int, input().split()))
sum_lst = []
sum_lst.append(sum(temp_lst[:K]))
for i in range(N-K):
sum_lst.append(sum_lst[i] - temp_lst[i] + temp_lst[K+i])
print(max(sum_lst))
2304 창고 다각형
n = int(input())
lst = []
for _ in range(n):
l, h = map(int, input().split())
lst.append([l,h])
lst.sort()
total = 0
c = 0
for a in lst:
if a[1] > total:
total = a[1]
idx = c #최대 기둥 높이의 인덱스
c += 1
#앞에서부터 최대 기둥까지
hgt = lst[0][1]
for i in range(idx):
if hgt < lst[i+1][1]:
total += hgt * (lst[i+1][0] - lst[i][0])
hgt = lst[i+1][1]
else:
total += hgt * (lst[i+1][0] - lst[i][0])
#뒤에서부터 최대 기둥까지
hgt = lst[-1][1]
for i in range(n-1, idx, -1):
if hgt < lst[i-1][1]:
total += hgt * (lst[i][0] - lst[i-1][0])
hgt = lst[i-1][1]
else:
total += hgt * (lst[i][0] - lst[i-1][0])
print(total)
2527 직사각형
for _ in range(4):
si1, sj1, ei1, ej1, si2, sj2, ei2, ej2 = map(int, input().split())
if si1 > ei2 or ei1 < si2 or sj1 > ej2 or ej1 < sj2: #공통부분 x
ans = 'd'
elif ej1 == sj2 or sj1 == ej2:
if ei1 == si2 or si1 == ei2: #세로 일치 & 가로 일치
ans = 'c'
else: #세로 일치 & 가로 불일치
ans = 'b'
elif ei1 == si2 or si1 == ei2: #세로 불일치 & 가로 일치
ans = 'b'
else:
ans = 'a'
print(ans)