링크 : https://www.acmicpc.net/problem/2667
from sys import stdin
from collections import deque
input = stdin.readline
n = int(input())
pan = [ list(input().rstrip()) for _ in range(n) ]
visited = [ [False] * n for _ in range(n) ]
answer = []
dx, dy = [0, 0, -1, 1], [-1, 1, 0, 0]
def bfs(x, y):
visited[x][y] = True
cnt = 1
q = deque([(x, y)])
while q:
px, py = q.popleft()
for k in range(4):
mx = px + dx[k]
my = py + dy[k]
if 0 <= mx < n and 0 <= my < n:
if pan[mx][my] == '1' and not visited[mx][my]:
visited[mx][my] = True
cnt += 1
q.append((mx, my))
return cnt
for i in range(n):
for j in range(n):
if pan[i][j] == '1' and not visited[i][j]:
res = bfs(i, j)
answer.append(res)
print(len(answer))
for i in sorted(answer):
print(i)
링크 : https://www.acmicpc.net/problem/5430
from sys import stdin
input = stdin.readline
T = int(input())
for _ in range(T):
p = input()
n = int(input())
reverse_flag = False
break_flag = False
# '[', ']', ',' 문자열 처리하는 부분
arr = input()
arr = arr.replace('[', '')
arr = arr.replace(']', '')
arr = list(arr.rstrip().split(','))
for i in p:
if i == 'R': # 뒤집는 횟수가 2의 배수이면 같은 결과 이므로 flag로 기록
reverse_flag = not reverse_flag
elif i == 'D':
# 1. D -> 0 -> [] 결과 : error
# 2. R -> 0 -> [] 결과 : [] 이 나와야 하므로 밑의 if문이 중요하다.
# 1.의 경우 배열 내에 ['']와 같이 빈 문자열이 생겨 이 부분을 처리해줘야 함.
if not arr or arr[0] == '':
print("error")
break_flag = True
break
else:
if reverse_flag:
arr.pop()
else:
arr.pop(0)
if not break_flag:
if reverse_flag:
arr.reverse()
print('[' + ','.join(arr) + ']')
링크 : https://www.acmicpc.net/problem/5525
from sys import stdin
input = stdin.readline
n = int(input())
m = int(input())
letter = list(input().rstrip())
cnt = 0
for i in range(m - (2*n)):
if letter[i] == 'I':
T = 'O'
for j in range(i+1, i+(2*n)+1):
if letter[j] == T:
if T == 'I':
T = 'O'
else:
T = 'I'
else:
break
else:
cnt += 1
print(cnt)
from sys import stdin
input = stdin.readline
n = int(input())
m = int(input())
letter = input().rstrip()
left, right = 0, 0
cnt = 0
while right < m:
if letter[right:right+3] == "IOI":
right += 2
if right - left == (2 * n):
cnt += 1
left += 2
else:
right += 1
left = right
print(cnt)
링크 : https://www.acmicpc.net/problem/6064