★ 30458 팰린드롬 애너그램 ★


import sys
input=sys.stdin.readline
N=int(input())
S=input().rstrip()
if N%2==1:
left,right=S[:len(S)//2],S[len(S)//2+1:]
else:
left,right=S[:len(S)//2],S[len(S)//2:]
s=left+right
kinds=set(s)
for kind in kinds:
if s.count(kind)%2!=0:
print('No')
sys.exit()
print('Yes')
😘 바꾸는 횟수는 무제한이므로, 주어진 문자열의 길이가 짝수/홀수에 따라 주어진 문자의 kind 개수 짝/홀 따지면 된다.
★ 30618 donstructive ★


N=int(input())
ans=[0 for _ in range(N)]
n=1
for i in range(N//2):
ans[i]=n
ans[(N-1)-i]=n+1
n+=2
if 0 in ans:
ans[ans.index(0)] = N
print(*ans)
😘 연속 부분 수열의 합이 최대가 되게 하는 순열은, 가운데 갈수록 점점 숫자를 키우게 하는 수열. N개의 개수가 있다면 N//2번 만큼 1부터 점점 숫자를 키워 양쪽에 배치하고 가운데로 진행하며 숫자 올리면 된다.
★ 30803 수도꼭지 ★


import sys
input=sys.stdin.readline
N=int(input())
opened=list(map(int,input().split()))
Q=int(input())
orders=[]
closed=[0]*N
for _ in range(Q):
orders.append(list(map(int,input().split())))
res=[sum(opened)]
cursum=sum(opened)
for order in orders:
if order[0]==1:
if opened[order[1]-1]>0:
res.append(cursum-opened[order[1]-1]+order[2])
opened[order[1]-1]=order[2]
else:
closed[order[1]-1] = order[2]
res.append(cursum)
else:
if opened[order[1]-1]>0:
res.append(cursum-opened[order[1]-1])
opened[order[1]-1],closed[order[1]-1]=closed[order[1]-1],opened[order[1]-1]
else:
res.append(cursum+closed[order[1]-1])
opened[order[1]-1],closed[order[1]-1]=closed[order[1]-1],opened[order[1]-1]
cursum=res[-1]
print(*res,sep='\n')
😘 문제에 주어진대로 그대로 시뮬레이션 진행
'BOJ > 🥈' 카테고리의 다른 글
★Sliding Window Upper + Intermediate - 2 Solved★ (0) | 2024.10.07 |
---|---|
★Stack & Queue & Deque Intermediate II - 3 Solved★ (0) | 2024.05.26 |
★DP Intermediate II - 2 Solved★ (0) | 2024.05.26 |
★BFS&DFS Upper-Intermediate I - 16 Solved★ (1) | 2024.05.12 |
★Two-Pointers Upper-Intermediate I - 6 Solved★ (1) | 2024.02.11 |
댓글