T =int(input())for tc inrange(1, T+1):
N, M =map(int,input().split())
flies =[list(map(int,input().split()))for _ inrange(N)]
max_die =0for i inrange(N-M+1):for j inrange(N-M+1):
result =0for k inrange(i, i+M):for l inrange(j, j+M):
result += flies[k][l]if max_die < result:
max_die = result
print(f'#{tc}{max_die}')# 이거 출력할 때 자꾸 result출력하려구 함 max_die 출력해야지!!-----------------------------------------------------------------
T =int(input())for tc inrange(1, T+1):
N, M =map(int,input().split())# N = 배열 / M = 파리채크기
arr =[list(map(int,input().split()))for _ inrange(N)]
arr_2 =[]for i inrange(N-M+1):for j inrange(N-M+1):
paris =0for k inrange(M):for l inrange(M):
paris += arr[i+k][j+l]
arr_2.append(paris)# 리스트에 어펜드해서 print(f'#{tc}{max(arr_2)}')# 최대값 출력하기
min max(4828)
sol
T =int(input())for tc inrange(1, T+1):
N =int(input())
numbers =list(map(int,input().split()))
max_num = numbers[0]
min_num = numbers[0]for i in numbers:if max_num <= i:
max_num = i
if min_num >= i:
min_num = i
chi = max_num - min_num
print(f'#{tc}{chi}')
숫자 카드(4834)
sol
'''
가장 많은 카드의 숫자와 장 수를 차례로 출력
'''
T =int(input())for tc inrange(1, T+1):
N =int(input())
cards =map(int,input())# print(cards)
tmp =[0]*10# 카드 개수 체크할 배열for card in cards:
tmp[card]+=1
max_card = tmp[0]# 초기값 설정for index inrange(len(tmp)):if max_card <= tmp[index]:
max_card = tmp[index]
card_count = index
print(f'#{tc}{card_count}{max_card}')
구간합(4835) ⇒ 최소값 설정하기
sol
T =int(input())for tc inrange(1, T+1):
N,M =map(int,input().split())
numbers =list(input().split())# print(numbers)# max_sums = 0# min_sums =for i inrange(N-M+1):# i위치에서 M개의 원소를 더해서 비교해야하기 때문에 범위 -M 해주기
sums =0for j inrange(M):# 구간합 구하기위한 범위
sums +=int(numbers[i+j])# i에서 시작하는 구간의 각 원소 sums에 더해서 구간 합 구하기if i ==0:
max_sums,min_sums = sums, sums
else:if max_sums < sums:# 구간합이 최대값으로 설정해 둔 것보다 크면
max_sums = sums # 구간합으로 최대값 변경 반복if min_sums > sums:# 구간합이 최소값으로 설정해 둔 것보다 작으면
min_sums = sums # 구간합으로 최소값 변경 반복
result = max_sums - min_sums
print(f'#{tc}{result}')
쉬운 거스름돈(1970)
sol
money =[50000,10000,5000,1000,500,100,50,10]
money_cnt =[0]*8
T =int(input())for tc inrange(1, T+1):
N =int(input())for i inrange(8):# money의 각 금액으로 나눈 몫이# 그 돈을 사용할 개수가 되고# 나머지로 다시 또 다른 금액이 몇개 필요한지 반복해야한다
money_cnt[i]= N // money[i]
N %= money[i]print(f'#{tc}')print(*money_cnt)
두 개의 숫자열(1959)
색칠하기(4836)
sol
'''
color = 1(빨강)
color = 2(파랑)
'''
T =int(input())for tc inrange(1, T+1):
N =int(input())
arr =[list(map(int,input().split()))for _ inrange(N)]
tmp =[[0]*10for _ inrange(10)]# 색칠할 범위 카운트해서 입력해 둘 배열 만들기# print(tmp)# print(arr)for i in arr:# 배열에서 리스트 하나씩 꺼내와진다.for j inrange(i[0], i[2]+1):for k inrange(i[1], i[3]+1):if i[4]==1:
tmp[j][k]+=1# elif i[4] == 2:# tmp[j][k] += 2else:
tmp[j][k]+=2
purple =0for x inrange(10):for y inrange(10):if tmp[x][y]==3:
purple +=1print(f'#{tc}{purple}')
스도쿠검증(1974)
sol
T =int(input())
N =9# 3*3 확인할 때 쓸 델타
di =[0,0,1,1,1,2,2,2]
dj =[1,2,0,1,2,0,1,2]for tc inrange(1, T+1):
arr =[list(map(int,input().split()))for _ inrange(N)]
garo = arr # 가로는 그대로 받아와주고# 세로## 참고 transpose = [list(i) for i in zip(*lst)]### tmp2 = list(zip(*tmp)) # 전치행렬 # 튜플형태로 행렬이 전치됨# sero = list(map(list, zip(*arr))) # 전치행렬하는 방법
sero =[]for i inrange(N):
col =[]for j inrange(N):
col.append(arr[j][i])
sero.append(col)
result =1# 조건에 안맞는일 없으면 1 출력할거다# 3*3 9칸 안에서for i inrange(0, N,3):for j inrange(0, N,3):
point = arr[i][j]# 3*3 행렬의 0,0 위치를 point로 잡아주고for k inrange(8):
ni = i + di[k]
nj = j + dj[k]# if 0 <= ni < N and 0 <= nj < N:
point += arr[ni][nj]# 나머지 8칸을 더해준다.# point하나 정해졌을 때마다 검사하기for ga, se inzip(garo, sero):# 가로와 세로 배열에서 원소 하나씩 가져와서# print(ga)# 1-9까지의 총합이 45라서ifsum(ga)==sum(se)== point ==45:# 원소 내의 숫자들의 합이 45이고# 다 더해져있는 point도 45이면continue# 계속 진행시키기else:# 합이 45가 안되면
result =0# result 값을 0으로 변환시켜주기print(f'#{tc}{result}')
숫자 배열 회전(1961) ⇒ 다시 풀기
sol
defrotation_90(arr):
matrix =[[0]*N for _ inrange(N)]for i inrange(N):for j inrange(N):
matrix[i][j]= arr[N-1-j][i]return matrix
T =int(input())for tc inrange(1, T+1):
N =int(input())
arr =[list(map(int,input().split()))for _ inrange(N)]
result = rotation_90(arr)
result2 = rotation_90(result)
result3 = rotation_90(result2)# print(result)print(f'#{tc}')for k inrange(N):
a =map(str, result[k])
b =map(str, result2[k])
c =map(str, result3[k])print(''.join(a),''.join(b),''.join(c))
어디에 단어가 들어갈 수 있을까(1979)
sol
'''
흰색 부분 = 1 (단어 들어갈 수 있는 곳)
검은색 부분 = 0 (단어 들어갈 수 없는 곳)
'''
T =int(input())# 가로 단어 먼저 탐색하기for tc inrange(1, T+1):
N, K =map(int,input().split())# 퍼즐가로세로길이 / 단어의 길이
puzzle =[list(map(int,input().split()))for _ inrange(N)]# print(puzzle)
words =0# 들어갈수 있는 단어의 개수# 가로로 순회하면서 흰색부분이 나오면 cnt +1 하고for i inrange(N):
cnt =0# 단어의 길이for j inrange(N):if puzzle[i][j]==1:
cnt +=1# print(cnt)# 하다가 0을 만나거나 퍼즐의 끝이나오면 멈추고if puzzle[i][j]==0or j == N-1:# 그 때의 길이를 단어의 길이 K와 비교해서if cnt == K:# 길이가 같으면 들어갈 수 있는 단어 +1 해주기
words +=1
cnt =0# 카운트 다한다음에 다시 다음 단어 길이 세려면# # 초기화 다시 해줘야 하는데 자꾸 까뮤금# print(words,'words')for a inrange(N):
cnt2 =0for b inrange(N):if puzzle[b][a]==1:
cnt2 +=1if puzzle[b][a]==0or b == N-1:if cnt2 == K:
words +=1
cnt2 =0print(f'#{tc}{words}')
View(1206) ★
view
# sol_1for tc inrange(1, T+1):
N =int(input())# 건물의 개수 N
h =list(map(int,input().split()))# N개의 건물의 높이
cnt =0# 세대의 수 카운트for i inrange(2, N-1):
max_h = h[i]# 가운데를 기준으로 얘가 최대조망권 초기설정값이됨for j inrange(i-2, i+3):# 양쪽 2칸씩 비교해야함if i == j:# 나와 나자신을 비교할 필요는 없다continue# 지나가쟈if h[i]> h[j]and max_h > h[i]-h[j]:
max_h = h[i]-h[j]if h[i]<= h[j]:breakelse:
cnt += max_h
print(f'#{tc}{cnt}')# sol_2
T =10# TC 10개 고정for tc inrange(1, T+1):# 10번 돌면서
N =int(input())# 가로 길이(N개의 건물)
height =list(map(int,input().split()))# 건물 높이 노나서 받아오기
view =0# 초기값 설정for i inrange(2, N-2):# 2 이상의 공간이 확보 되어야하니까 i-2부터 비교하기 위해서 설정
max_v = height[i-2]# max_v = 0if max_v < height[i-1]:# i-1과 비교
max_v = height[i-1]if max_v < height[i+1]:# i+1과 비교
max_v = height[i+1]if max_v < height[i+2]:# i+2과 비교
max_v = height[i+2]# if max_v < height[i-2]: # i-2과 비교# max_v = height[i-2] # 얘는 제거해도 됨if height[i]> max_v:# i가 주변 보다 높으면
view += height[i]- max_v
print(f'#{tc}{view}')# sol_3
T =10for tc inrange(1, T+1):
N =int(input())
lst =list(map(int,input().split()))
res =0for i inrange(2, N-2):
d2 = lst[i]- lst[i+1]
d1 = lst[i]- lst[i+2]
d_1 = lst[i]- lst[i-1]
d_2 = lst[i]- lst[i-2]if d2 >0and d_1 >0and d1 >0and d_2 >0:
res +=min(d_2, d_1,d1,d2)print(f'#{tc}{res}')
Flatten(1208)⇒ 한번만 더
Flatten
T =10for tc inrange(1, T+1):
dump =int(input())
lst =list(map(int,input().split()))for i inrange(dump):
lst.sort()if lst[-1]- lst[0]<=1:break
lst[0]+=1
lst[-1]-=1
res =max(lst)-min(lst)print(f'#{tc}{res}')---------------------------------------------------------------for tc inrange(1,11):
res =0
dump =int(input())
ct =list(map(int,input().split()))for _ inrange(dump):
max_1 =max(ct)
min_1 =min(ct)# 최대, 최소 값 인덱스 받아오기
maxIdx = ct.index(max_1)
minIdx = ct.index(min_1)
ct[maxIdx]-=1
ct[minIdx]+=1
res =max(ct)-min(ct)print(f'#{tc}{res}')---------------------------------------------------------------
T =10
W =100# 가로는항상 100으로 주어짐for tc inrange(1, T+1):
dump_ =int(input())# 덤프 횟수 제한
boxes =list(map(int,input().split()))# 각 상자의 높이
result =0while dump_ >0:# 덤프횟수가 소진될 때까지
dump_ -=1# 한번 반복할 때마다 덤프횟수 -1
max_idx =0
min_idx =0# 범위설정 1부터 하는 이유는 이미 max_idx 값 초기화를 0으로 해뒀기 때문에# 굳이 0부터 비교하면 똑같은거끼리 비교하는거라서 1부터 하면 되는 거!!for i inrange(1, W):# boxes의 몇번째인덱스위치가 최고점일까if boxes[max_idx]<= boxes[i]:
max_idx = i
# boxes의 몇번째인덱스위치가 최저점일까if boxes[min_idx]>= boxes[i]:
min_idx = i
# 최고점 최저점을 찾은 다음에if boxes[max_idx]- boxes[min_idx]<=1:# 최고점과 최저점의 간격이 1보다 작거나 같아지면(평탄화 완료)# 최고점과 최저점의 차이를 반환하고 끝낸다.
result = boxes[max_idx]- boxes[min_idx]breakelse:# 평탄화가 완료되지 않으면(아직 진행중이면)
boxes[max_idx]-=1# 가장 높은 상자에서 하나 빼서
boxes[min_idx]+=1# 가장 낮은 상자에 하나 더해주기if dump_ ==0:# 아직 평탄화 다 못했는데 평탄화제한 횟수 다 써버리면
min_idx =0
max_idx =0for j inrange(W):# 범위 돌면서 최고점, 최저점 찾기# boxes의 몇번째인덱스위치가 최고점일까if boxes[min_idx]> boxes[j]:
min_idx = j
# boxes의 몇번째인덱스위치가 최저점일까if boxes[max_idx]<= boxes[j]:
max_idx = j
result = boxes[max_idx]- boxes[min_idx]# 그때의 차이 출력print(f'#{tc}{result}')------------------------------------------------------------------------------------T =10
W =100for tc inrange(1, T+1):
dump_cnt =int(input())
boxes =list(map(int,input().split()))
boxes.sort()while dump_cnt >0:
dump_cnt -=1
boxes[-1]-=1
boxes[0]+=1
boxes.sort()
result =max(boxes)-min(boxes)print(f'#{tc}{result}')
민석이의 과제 체크하기
Sumㅌ
특별한 정렬(4843)
sol
T =int(input())for tc inrange(1, T+1):
N =int(input())
numbers =list(map(int,input().split()))# print(numbers)
result =[]
numbers.sort()# print(numbers)while numbers:
result.append(numbers.pop())
result.append(numbers.pop(0))
case = result[:10]print(f'#{tc}',*case)
Magnetic(1220) - if/elif
자석
T =10for tc inrange(1, T+1):
N =int(input())# 테이블의 한 변의 길이
table =[list(map(int,input().split()))for _ inrange(N)]# print(table)
cnt =0for i inrange(N):
flag =0for j inrange(N):if table[j][i]==1:
flag =1elif table[j][i]==2and flag ==1:
cnt +=1
flag =0# 다시 아무것도 안움직이는 상태로 되돌려주기print(f'#{tc}{cnt}')
최대 성적표 만들기(4466)
sol
T =int(input())for tc inrange(1, T+1):
N, K =map(int,input().split())
scores =list(map(int,input().split()))# print(N,K)# print(scores)
scores.sort()# 정렬 해주고
sum_ls =[]# 최대값 K개 넣을 리스트 만들고for i inrange(K):
sum_ls.append(scores.pop())# 정렬해둿으니까 뒤에서부터 큰 수 K개# pop해서 리스트에 넣어주고# print(sum_ls)
result =0# 결과값 변수for j inrange(len(sum_ls)):# 리스트에 넣은 개수만큼 반복하면서
result += sum_ls.pop()# 결과값에 누적해서 더해주기print(f'#{tc}{result}')
농작물 수확하기(2805) ⇒ 범위 문제
sol
T =int(input())for tc inrange(1, T+1):
N =int(input())
arr =[list(map(int,input()))for _ inrange(N)]
benefit =0
G = N//2for i inrange(N):if i <= G:for j inrange(G-i, G+i+1):
benefit += arr[i][j]else:for j inrange(i-G, N-i+G):
benefit += arr[i][j]print(f'#{tc}{benefit}')
정곤이의 단조 증가하는 수(6190)
정곤이
# sol 1
T =int(input())for tc inrange(1, T+1):
N =int(input())
numbers =list(map(int,input().split()))
multis =[]for i inrange(N):for j inrange(i+1, N):
multi = numbers[i]*numbers[j]
multis.append(str(multi))
danjo =[]for k in multis:
LEN =len(k)if LEN <2:continue
check =True# 단조 증가하는지 체크for a inrange(LEN-1):if k[a]> k[a+1]:# 앞의 자리가 뒤 자리 보다 크게 되면
check =False# check 변환 그러면서break# 바로위 for문 탈출if check:# 방금 포문 아무 이상없이 한바꾸 돌았네 ?
danjo.append(int(k))# 그럼 dan 리스트에 i이놈 정수로 바까서 ean에 넣어줘if danjo:
result =max(danjo)# max doesn't work in empty listprint(f'#{tc}{result}')else:print(f'#{tc} -1')------------------------------------------------------------------------------------# sol2
T =int(input())for tc inrange(1, T+1):
N =int(input())
numbers =list(map(int,input().split()))
multis =[]for i inrange(len(numbers)-1):for j inrange(i+1,len(numbers)):
multi = numbers[i]*numbers[j]
multi_list =list(map(int,str(multi)))
multi_len =len(multi_list)# print(multi_list) # [8] / [1, 4] / [2, 0] / [2, 8] / [4, 0] / [7, 0]
check =Truefor a inrange(multi_len -1):if multi_list[a]> multi_list[a+1]:
check =Falsebreakelse:
multis.append(multi)
result =int(max(multis))if multis:print(f'#{tc}{result}')else:print(f'#{tc} -1')
GNS(1221)
GNS
numbers =['ZRO','ONE','TWO','THR','FOR','FIV','SIX','SVN','EGT','NIN']
T =int(input())for _ inrange(1, T+1):
tc, L =input().split()
num_ls =list(input().split())# sort_ls = sorted(num_ls, reverse=True)
ls =[]
N =len(num_ls)for i inrange(N):
ls.append(numbers.index(num_ls[i]))
ls.sort()for j inrange(N):
ls[j]= numbers[ls[j]]print(tc)print(*ls)
회문1(1215) = 외우기
회문1
T =10for tc inrange(1, T+1):
K =int(input())
N =8
arr =[input()for _ inrange(N)]# print(arr)
cnt =0# 회문개수 세려고for i inrange(N):for j inrange(N - K +1):# 회문의 길이가 K라서for p inrange(K //2):# 찾아야 하는 회문길의의 절반만큼 기준잡아서if arr[i][j + p]!= arr[i][j + K -1- p]:# 가로break# for p, j부터 시작하는 구간은 회문이 아님else:# for이 끝나고 실행되는 행# 근데 만약 break가 실행된 상태면 이거 실행 안됨
cnt +=1for p inrange(K //2):if arr[j + p][i]!= arr[j + K -1- p][i]:# 세로break# for p, j부터 시작하는 구간은 회문이 아님else:
cnt +=1print(f'#{tc}{cnt}')
회문2(1216)
회문2
T =10
N =100for _ inrange(1, T+1):
tc =int(input())
matrix =[input()for _ inrange(N)]
length =0# 회문의 길이 긴것부터 가져와서 l로for l inrange(N,0,-1):for i inrange(N):for j inrange(N-l+1):for k inrange(l//2):if matrix[i][j+k]!= matrix[i][j+l-1-k]:breakelse:
length =max(l, length)for p inrange(l//2):if matrix[j+p][i]!= matrix[j+l-1-p][i]:breakelse:
length =max(l, length)print(f'#{tc}{length}')====================================================================================
T =10
N =100for _ inrange(1, T+1):
tc =int(input())
pallin =[input()for _ inrange(N)]# print(pallin)long=1for K inrange(N,0,-1):# K의 길이를 긴 것부터 뽑아와서 설정해주고for i inrange(N):for j inrange(N-K+1):for k inrange(K//2):
check =Trueif pallin[i][j+k]!= pallin[i][j+K-1-k]:
check =Falsebreakif check:# 설정해둔 K랑 long이랑 비교해서 가장 긴 회문길이 구하기long=max(long, K)for p inrange(K//2):
check =Trueif pallin[j+p][i]!= pallin[j+K-1-p][i]:
check =Falsebreakif check:long=max(long, K)print(f'#{tc}{long}')
진기의 최고급 붕어빵(1860)
붕어빵
'''
제공할 수 있으면 'Possible'
아니라면 'Impossible'
'''
T =int(input())for tc inrange(1, T+1):# N손님수, M초마다 K개 생산
N, M, K =map(int,input().split())# print(N, M, K)# N명이 각각 도착하는 시간
visited_time =list(map(int,input().split()))
visited_time.sort()# 도착시간 순으로 정렬
result ='Possible'for i inrange(N):# 1초에 K//M씩 생산하니까# i+1 번째 손님이 방문한 시간이# i 번째 손님이 방문한 시간까지의 붕어빵 생산량보다 커버리면# 붕어빵이 없어서 제공할 수가 없으니까# 아래와 같이 조건문을 달아준다.if i+1> visited_time[i]//M*K:
result ='Impossible'breakprint(f'#{tc}{result}')
기차사이의 파리(6019)
sol
T =int(input())for tc inrange(1, T+1):
D, A, B, F =map(int,input().split())# A와 B는 D/(A+B)시간이면 만난다
time = D/(A+B)# 파리의 이동거리은 D/(A+B)를 파리의 속력이랑 곱하면 된다
result = time*F
print(f'#{tc}{result}')
Ladder1(1210)
ladder1 ⇒ 다시 한번 보자
# 하, 좌, 우
dx =[1,0,0]
dy =[0,-1,1]defsearch(x,y):#들린 지점은 1로 표시해서 다시 돌아가지 않게 만들기 위함
visited =[[0]*100for _ inrange(100)]
original_y = y # 출발지점의 x좌표
visited[x][y]=1while x !=99:# 마지막 행까지 갈 동안for k inrange(3):# 하, 좌, 우 방향 조사하면서
ni = x + dx[k]
nj = y + dy[k]# ni,nj가 범위 안에 있고 갈 수 있는 길이며, 들린적이 없으면 가야지if0<= ni < N and0<= nj < N and ladder[ni][nj]and visited[ni][nj]==0:
x, y = ni, nj # 그리고 거기를 기점으로 또 serch 해야함
visited[ni][nj]=1# 들렀음을 표시해주자if ladder[x][y]==2:# 2가 적혀있는 도착점에 다다르면return original_y # 출발위치의 x좌표인 y를 반환else:return"실패"
T =10
N =100for _ inrange(1, T+1):
tc =int(input())
ladder =[list(map(int,input().split()))for _ inrange(N)]# print(ladder)for i inrange(N):if ladder[0][i]==1:
result = search(0, i)if result !="실패":breakprint(f'#{tc}{result}')
Ladder2(1211)
ladder2 ⇒ 다시 한번 보자
# sol_1# 하, 좌, 우
dx =[0,0,1]
dy =[1,-1,0]defcheck(x, y):
visited =[[0]*100for _ inrange(100)]
original = y
visited[x][y]=1
cnt =0while x !=99:for k inrange(3):
ni = x + dx[k]
nj = y + dy[k]if0<= ni < N and0<= nj < N and ladder[ni][nj]and visited[ni][nj]==0:
x, y = ni, nj
visited[ni][nj]=1
cnt +=1breakreturn[cnt, original]
T =10
N =100for _ inrange(1, T+1):
tc =int(input())
ladder =[list(map(int,input().split()))for _ inrange(N)]
distance =987654321# 가장 짧은 이동거리를 구하기 위해 비교할 초기값 설정
ans_y =0# 시작점인 x좌표 구하기 위해 비교할 초기값 설정for i inrange(N):if ladder[0][i]==1:# 첫번째 행의 값이 1이면 시작지점
dis, y_cordi = check(0, i)# 이동거리와, 그때의 x 좌표를 반환한다# print(dis, y_cordi)if distance > dis:# 가장 짧은 이동거리를 찾는다
distance = dis # 그 때의 거리와
ans_y = y_cordi # 그 때의 시작점 x좌표를 구한다.print(f'#{tc}{ans_y}')----------------------------------------------------------------------------------# sol_2# 하, 좌, 우
dx =[0,0,1]
dy =[1,-1,0]defcheck(x, y):
visited =[[0]*100for _ inrange(100)]
original = y
visited[x][y]=1
cnt =0while x !=99:for k inrange(3):
ni = x + dx[k]
nj = y + dy[k]if0<= ni < N and0<= nj < N and ladder[ni][nj]and visited[ni][nj]==0:
x, y = ni, nj
visited[ni][nj]=1
cnt +=1breakreturn[cnt, original]# 이동거리와, 좌표값을 리스트에 넣어서 반환한다.
T =10
N =100for _ inrange(1, T +1):
tc =int(input())
ladder =[list(map(int,input().split()))for _ inrange(N)]
cnt_list =[]# check 함수에서 반환되는 리스트 넣을 리스트 만들어두기for i inrange(N):# N크기의 사다리라서 그 길이만큼 순회하면서if ladder[0][i]==1:# 첫번째 행의 값이 1이면 시작지점이다# 그때의 이동거리와, 좌표값리스트를 구하기 위한 check함수 호출 및 cnt_list에 담기
cnt_list.append(check(0, i))
cnt_list.sort()# 기본정렬은 리스트의 리스트 첫번째 값을 기준으로 오름차순 정렬된다.
result = cnt_list[0][1]# 정렬해뒀으니까 제일 앞에 있는 것의 이동거리가 제일 작을 것이고# 그때의 x좌표를 result에 할당한다.print(f'#{tc}{result}')----------------------------------------------------------------------------------# sol_3for tc inrange(1,11):input()
MAP =[list(map(int,input().split()))for _ inrange(100)]
MIN =float('inf')
res =-1for start inrange(100):if MAP[0][start]==1:
col = start
row =0
cnt =0while row <99:
cnt +=1# 오른쪽으로 이동if col <99and MAP[row][col+1]==1:while col <99and MAP[row][col+1]==1:
col +=1
cnt +=1# 왼쪽으로 이동elif col >0and MAP[row][col-1]==1:while col >0and MAP[row][col-1]==1:
col -=1
cnt +=1
row +=1if MIN > cnt:
MIN = cnt
res = start
print(f'#{tc}{res}')
행렬찾기(1258)
sol
T =int(input())for tc inrange(1, T+1):
n =int(input())
arr =[list(map(int,input().split()))for _ inrange(n)]
ls =[]for i inrange(n):for j inrange(n):if arr[i][j]!=0:
x, y = j, i
while x < n and arr[i][x]!=0:
x +=1while y < n and arr[y][j]!=0:
y +=1if arr[i][j]!=0:# 요조건은 위에 이미 있어서 안해두 댐
ls.append((y-i, x-j))for a inrange(i, y):for b inrange(j, x):
arr[a][b]=0
ls.sort(key=lambda a:(a[0]*a[1], a[0]))print(f'#{tc}',len(ls), end=' ')for x,y in ls:print(x, y, end=' ')print()
러시아 국기 같은 깃발(4613)
러시아
T =int(input())for tc inrange(1, T+1):
N, M =map(int,input().split())
arr =[input()for _ inrange(N)]
mx =0for i inrange(N-2):for j inrange(i+1, N-1):
cnt =0for s inrange(i+1):
cnt += arr[s].count('W')for s inrange(i+1, j+1):
cnt += arr[s].count('B')for s inrange(j+1, N):
cnt += arr[s].count('R')
mx =max(mx, cnt)print(f'#{tc}{N*M-mx}')
상호의 배틀필드(1873)
배틀필드
import sys
# sys.stdin = open('input.txt')
T =int(input())for tc inrange(1, T +1):
H, W =map(int,input().split())
MAP =[list(input())for _ inrange(H)]
N =int(input())
comm =input()for i inrange(H):for j inrange(W):if MAP[i][j]in'<>^v':
row = i
col = j
breakfor i inrange(len(comm)):
t_row = row
t_col = col
if comm[i]=='U':
MAP[t_row][t_col]='^'if t_row-1>=0and MAP[t_row-1][t_col]=='.':
MAP[t_row-1][t_col]='^'
MAP[t_row][t_col]='.'
row -=1elif comm[i]=='R':
MAP[t_row][t_col]='>'if t_col+1< W and MAP[t_row][t_col+1]=='.':
MAP[t_row][t_col+1]='>'
MAP[t_row][t_col]='.'
col +=1elif comm[i]=='L':
MAP[t_row][t_col]='<'if t_col -1>=0and MAP[t_row][t_col-1]=='.':
MAP[t_row][t_col-1]='<'
MAP[t_row][t_col]='.'
col -=1elif comm[i]=='D':
MAP[t_row][t_col]='v'if t_row+1< H and MAP[t_row+1][t_col]=='.':
MAP[t_row+1][t_col]='v'
MAP[t_row][t_col]='.'
row +=1elif comm[i]=='S':if MAP[t_row][t_col]=='^':if t_row -1>=0:for u inrange(t_row-1,-1,-1):if MAP[u][t_col]=='*':
MAP[u][t_col]='.'breakelif MAP[u][t_col]=='#':breakelif MAP[t_row][t_col]=='>':if t_col +1< W:for r inrange(t_col +1, W):if MAP[t_row][r]=='*':
MAP[t_row][r]='.'breakelif MAP[t_row][r]=='#':breakelif MAP[t_row][t_col]=='v':if t_row +1< H:for d inrange(t_row +1, H):if MAP[d][t_col]=='*':
MAP[d][t_col]='.'breakelif MAP[d][t_col]=='#':breakelif MAP[t_row][t_col]=='<':if t_col -1>=0:for l inrange(t_col -1,-1,-1):if MAP[t_row][l]=='*':
MAP[t_row][l]='.'breakelif MAP[t_row][l]=='#':breakprint(f'#{tc}{"".join(MAP[0])}')for k inrange(1, H):print("".join(MAP[k]))
문제 제목 붙이기(7087) ⇒ 파이썬 제출 안됨
sol
T =int(input())for tc inrange(1, T+1):
cnt =0
N =int(input())
ls =[]for _ inrange(N):
ls.append(input())
ls.sort()# print(ls)
log =0for i inrange(len(ls)-1):if log ==0:iford(ls[i][0])==ord(ls[i+1][0]):
cnt +=1
log =1iford(ls[i][0])+1==ord(ls[i+1][0]):
cnt +=1else:breakelse:iford(ls[i][0])+1==ord(ls[i+1][0]):
cnt +=1else:breakprint(f'#{tc}{cnt}')
영준이의 카드 카운팅(4047)
퍼팩트 셔플(3499)
패턴 마디의 길이(2007)
sol
T =int(input())
cnt =0# 마디의 길이를 출력할거다for tc inrange(1, T+1):
sentence =list(input())# print(sentence)# N = len(sentence)
madi =0for i inrange(1,11):if sentence[:i]== sentence[i:i*2]:
madi = i
breakprint(f'#{tc}{madi}')
간단한 369게임(1926)
자기방으로 돌아가기(4408)
자기방
'''
겹치는 만큼 기다려야하니까 가장 많이 겹치는 만큼이 최소 걸리는 시간이 되겠다!!
'''
T =int(input())for tc inrange(1, T+1):
N =int(input())# 학생 수
arr =[list(map(int,input().split()))for _ inrange(N)]# for _ in range(N):# go, to = map(int, input().split()) 9# 현재 방과 돌아갈 방# print(go,to)# print(arr)
cnt =[0]*201# 방사이 공간을 지나는 사람수를 기록할 복도for a, b in arr:# arr에서 두개 꺼낼건데 a <= b라는 보장이 없음에 주의!!# 복도번호 = (방번호 + 방번호%2) // 2
a =(a + a %2)//2
b =(b + b %2)//2for i inrange(min(a, b),max(a, b)+1):# 둘 중 작은데서 출발해서 둘중 큰곳으로 도착
cnt[i]+=1print(f'#{tc}{max(cnt)}')
재밌는 오셀로 게임
18575
sol
T =int(input())
di =[-1,0,1,0]
dj =[0,1,0,-1]for tc inrange(1, T +1):
N =int(input())
arr =[list(map(int,input().split()))for _ inrange(N)]
max_sum =0
min_sum =987654321for i inrange(N):for j inrange(N):
point = arr[i][j]for k inrange(4):for l inrange(1, N):
ni = i + di[k]*l
nj = j + dj[k]*l
if0<= ni < N and0<= nj < N:
point += arr[ni][nj]if max_sum <= point:
max_sum = point
if min_sum >= point:
min_sum = point
result = max_sum - min_sum
print(f'#{tc}{result}')
당근 포장하기(16811)
sol
defcheck(N, ls):# 당근의 크기를 입력하면 모든 조건을 확인하는 프로그램'''
당근 3개 => 소,중,대 상자에 든 당근의 개수 차이 = 0 소 1 중 1 대 1 씩 들어갔으니까
당근 5개 > 소 3 중 1 대 1 = 당근의 개수 차이 2
그런데 2개 초과하는 상자 잇으니까 조건 만족 x
당근 8개
'''
L =int(N/2)# L초과하는 당근이 있으면 안됨
ls.sort()
min_chai =987654321# 포장개수차이 최소값 초기값 설정for i inrange(N-2):for j inrange(i+1, N-1):if ls[i]!= ls[i+1]and ls[j]!= ls[j+1]:
small = i+1
middle = j-i
large = N-1-j
if small <= L and middle <= L and large <= L:if min_chai >=(max(small, middle, large)-min(small, middle, large)):
min_chai =max(small, middle, large)-min(small, middle, large)return min_chai
T =int(input())# 수확횟수for tc inrange(1, T+1):
N =int(input())# 수확한 당근의 개수 3
C =list(map(int,input().split()))# 당근의 크기 1 2 3# C.sort() # 당근을 크기 순으로 정렬# min_v = 1000 # 포장별 최소 개수 차이, 포장 불가인 경우 -1# for i in range(N-2):# for j in range(i+1, N-1):# if C[i] != C[i+1] and C[j] != C[j+1]: # 같은 크기 사이에 경계를 두면 안돼# small = i + 1 # 소 상자에 들어간 당근 개수# middle = j-i # 중 상자에 들어간 당근 개수# large = N-1-j # 대 상자에 들어간 당근 개수# if 0 < small <= N//2 and 0 < middle <= N//2 and 0 < large <= N//2:# if min_v > (max(small, middle, large) - min(small, middle, large)):# min_v = max(small, middle, large) - min(small, middle, large)
res = check(N,C)if res ==987654321:print(f'#{tc} -1')else:print(f'#{tc}{res}')
백준
스위치켜고끄기
주사위_쌓기
창고_다각형
일곱_난쟁이(2309)
난쟁이
K =100
S =0
ls =[]for i inrange(9):
ls.append(int(input()))
S =sum(ls)
find = S - K
ls.sort()
a =0
b =0
N =len(ls)for j inrange(N-1):for k inrange(j+1, N):if ls[j]+ ls[k]== find:
a = ls[j]
b = ls[k]# print(a, b) = 15, 25# print(type(a)) -> intfor f in ls:if f != a and f != b:print(f)
참외밭
직사각형
2527
직사각형을 만드는 방법
8320
N =int(input())# [1] 가능한 경우를 모두 순회
ans =0for i inrange(1, N+1):for j inrange(i, N+1):if i*j <= N:
ans +=1print(ans)# [2] 몫 연산을 통해서 처리
ans = N
for i inrange(2, N):
n = N // i -(i-1)if n <1:break
ans += n
print(ans)
수열
2559
# N = 온도측정한 전체 날짜의 수, K = 합구하기 위한 연속적인 날짜의 수
N, K =map(int,input().split())
degrees =list(map(int,input().split()))# 매일 측정한 온도
result =[]# 온도의 합을 구해서 넣어둘 리스트
result.append(sum(degrees[0:K]))# 0번째부터 K-1번째까지 먼저 합해서 넣어준다음for i inrange(N-K):# K개만큼 더해야하니까 인덱스 번호 N에서 K 빼준 범위로 설정
result.append(result[i]-degrees[i]+degrees[i+K])# 더한거에서 젤 앞에꺼 빼고 그다음 하나 더해주기(한칸씩 뒤로 가는겨)print(max(result))# 리스트에 넣어둔 것들 중 가장 큰값 프린트 하기
색종이(2563)
색종이
N =int(input())
matrix =[[0]*102for _ inrange(102)]# 색종이 표시할 배열for _ inrange(N):
a, b =map(int,input().split())for i inrange(a,a+10):for j inrange(b, b+10):
matrix[i][j]=1
result =0for k in matrix:
result +=sum(k)# matrix 안의 k리스트들의 합을 result에 누적시켜 더해주면# 넓이(1로 채워져 있는 곳)이 나온다print(result)
색종이(10163)
10163
defcount(arr):
cnt =0for ls in arr:for k inrange(1,len(ls)):if ls[k-1]!= ls[k]:
cnt +=1return cnt
N =int(input())
tmp =[[0]*102for _ inrange(102)]for _ inrange(N):
a, b =map(int,input().split())for i inrange(a, a+10):for j inrange(b, b+10):
tmp[i][j]=1# tmp2 = list(zip(*tmp)) # 전치행렬 # 튜플형태로 행렬이 전치됨
tmp2 =list(map(list,zip(*tmp)))# 수정 필요할 시의 전치행렬 # 리스트 형태로 전치됨
result = count(tmp)+ count(tmp2)print(result)
경비원
빙고
줄_세우기
2605
N =int(input())# 학생의 수
numbers =list(map(int,input().split()))
alst =[n for n inrange(1, N+1)]# print(alst) # [1, 2, 3, 4, 5]for i inrange(N):# i위치의 학생을 순서대로 이동처리
n, t = numbers[i], alst[i]# 앞으로 이동할 칸 수, 학생번호# 순차적으로 덮어씌우기# 나한테 전에꺼를 집어넣기# 끝난다음에는 alst[i-n]번째에 t 넣어주기for j inrange(i, i-n,-1):
alst[j]= alst[j-1]
alst[i-n]= t
print(*alst)
10431
P =int(input())for tc inrange(1, P+1):
lst =list(map(int,input().split()))[1:]
cnt =0for i inrange(1,20):for j inrange(i):# i의 이전 값들을 비교할것if lst[i]< lst[j]:# 더 큰애들이 앞에 서있으면
cnt +=1# 카운트 증가print(f'{tc}{cnt}')
종이자르기
2628 - idea
'''
가장 큰 종이 조각의 넓이 ?
바깥 둘레에서 잘라야하는 열과 행의 번호를
각각 리스트에 담아서
자르면 나오는 길이가지고
가장 긴 길이 두개 곱하면 가장 큰 색종이 넓이 구할 수 있음
'''# 종이의 가로, 세로
W, H =map(int,input().split())# [1] 가능한 가로/세로 자르는 위치를 저장 후 정렬
w_ls =[0, H]
h_ls =[0, W]
N =int(input())# 잘라야 하는 점선의 개수for _ inrange(N):
t, n =map(int,input().split())if t ==0:
w_ls.append(n)else:
h_ls.append(n)
w_ls.sort()
h_ls.sort()# print(w_ls)# [2] 가장 긴 길이 찾기
w_mx =0for i inrange(1,len(w_ls)):
w_mx =max(w_mx, w_ls[i]- w_ls[i-1])
h_mx =0for i inrange(1,len(h_ls)):
h_mx =max(h_mx, h_ls[i]- h_ls[i-1])print(w_mx*h_mx)
수_이어가기
직사각형네개의합집합의면적구하기
2669
arr =[[0]*102for _ inrange(102)]for _ inrange(4):
a, b, c, d =map(int,input().split())for i inrange(b, d):for j inrange(a, c):
arr[i][j]=1
cnt =0for k inrange(102):for l inrange(102):if arr[k][l]==1:
cnt +=1print(cnt)
자리배정
10157
C, R =map(int,input().split())
K =int(input())if R*C < K:# 배정이 불가능한 경우 0print(0)else:# 배정하면서 K가 되면 그 때 좌표 출력
di, dj =[1,0,-1,0],[0,1,0,-1]# 주변을 1로 둘러싸면 : 범위체크 필요없음
arr =[[1]*(C+2)]+[[1]+[0]*C +[1]for _ inrange(R)]+[[1]*(C+2)]
ci, cj, dr =1,1,0for n inrange(1, K):
arr[ci][cj]= n
ni, nj = ci + di[dr], cj + dj[dr]if arr[ni][nj]==0:# 비어있으니 이동가능
ci, cj = ni, nj
else:# 범위밖 또는 이미 채워진경우
dr =(dr+1)%4
ci, cj = ci+di[dr], cj+dj[dr]print(f'{cj}{ci}')
개미
방_배정
13300
'''
여학생 = 0
남학생 = 1
'''defcount(arr):
grade =[0]*7# 학년 별로 몇명인지 세보자# ls = [] #for i in arr:# 성별로 구분해서 학년만 넣어둔 리스트를 순회하면서
grade[i]+=1# 그 학년을 인덱스번호로 활용해서 cnt 증가시켜주기# print(grade)
result =0# 방 몇개필요한지 구할 결과값변수 초기화for k in grade:# 학년별로 몇명인지 누적해서 구해둔 grade리스트 순회하면서if k % K ==0:# 한방에 배정할 수 있는 최대 인원수로 나눈 값이 딱 떨어지면
result += k//K # 그 나눗셈 몫만큼의 방을 더해주면 됨# print(result)else:# 안나눠 떨어지면 그 안나눠 떨어진 사람을 위해서
result += k//K +1# 방 하나 추가 배정해 주면 됨return result # 누적된 방이 몇 개 필요한지에 대한 result값 반환하기# N = 수학여행에 참가하는 학생 수# K = 한 방에 배정할 수 있는 최대 인원 수
N, K =map(int,input().split())
cnt_S0 =[]
cnt_S1 =[]for _ inrange(N):
S, Y =map(int,input().split())# 성별 S / 학년 Y# print(S, Y)if S ==1:# 성별 1일경우# cnt_S1.append([S, Y]) # 의 성별과 학년 넣어주기
cnt_S1.append(Y)# 아니지, 학년만 넣어주자 성별은 노났으니까elif S ==0:# 성별 2일경우# cnt_S0.append([S, Y])
cnt_S0.append(Y)
a = count(cnt_S1)# 성별 남자일 경우의 필요 방개수# print(a)
b = count(cnt_S0)# 성별 여자일 경우의 필요한 방개수
ans = a+b # 더해서 결과값print(ans)'''
print(cnt_S0)
print(cnt_S1)
[1, 2, 2, 3, 6, 5] # 성별 여자인 경우의 학년
[1, 1, 2, 3, 4, 3, 3, 5, 5, 6] # 성별 남자인 경우의 학년'''
딱지놀이
14696
N =int(input())# 딱지놀이의 총 라운드 수for _ inrange(N):
A =list(input().split())
B =list(input().split())
a_len =int(A[0])
b_len =int(B[0])
a_ls = A[1:]
b_ls = B[1:]# 인덱스 이용해서 카운트 해주자(1,2,3,4 입력해주기위해서 *5)
one_cnt =[0]*5
two_cnt =[0]*5for i inrange(a_len):
one_cnt[int(a_ls[i])]+=1for j inrange(b_len):
two_cnt[int(b_ls[j])]+=1# 4,3,2,1 역순 순회하면서 누가 이기는지 판단하기
result =''for k inrange(4,0,-1):if one_cnt[k]> two_cnt[k]:
result ='A'breakelif one_cnt[k]< two_cnt[k]:
result ='B'breakelse:
result ='D'print(result)