1. Problem
2. Others' Solutions
① 주어진 순열의 오른쪽에서 시작하여 내림차순이 발견되는 index 찾기
② Decreasing Section(index+1 ~ end)의 오른쪽에서 시작하여 index 값보다 큰 값을 찾음
③ index 값과 큰 값을 swap
④ Decreasing Section(index+1 ~ end)을 오름차순으로 정리
import sys
n = int(sys.stdin.readline())
seq = list(map(int,sys.stdin.readline().rstrip().split()))
flag = False
for i in range(len(seq)-1, 0, -1): # (len(seq)-2, 0, -1)를 하면 n=2 일때 버그
if seq[i-1] < seq[i]: # Decreasing Section 찾기
start = i-1 # Decreasing Section 바로 앞 요소(스왑 기준)의 인덱스를 저장
for j in range(len(seq)-1,start,-1): # Decreasing Section 의 오른쪽에서 부터 start 요소보다 큰 값을 찾음
if seq[j] > seq[start]:
seq[j], seq[start] = seq[start], seq[j] # 찾으면 스와핑 -> 스와핑 된 후에는 여전히 Decreasing Section
break
start = start + 1 # 오름차순할 Section 의 시작 요소
end = len(seq) - 1 # 오름차순할 Section 의 마지막 요소
while(start < end): # 오름차순 정렬
seq[start], seq[end] = seq[end], seq[start]
start += 1
end -= 1
flag = True
break
if flag == True: # 순서가 바뀌었다면
print(*seq)
else: # 마지막 순열이라면 = Decreasing Sequence
print(-1)
3. Learned
1. Problem
2. My Solution
import sys
sys.setrecursionlimit(100000)
def dfs(x,y,color):
if x < 0 or x > n-1 or y < 0 or y > n-1:
return False
if picture[x][y] == color:
if picture[x][y] == 'R' or picture[x][y] =='G':
picture[x][y] = 'RG'
else:
picture[x][y] = 'v'
dfs(x-1,y,color)
dfs(x+1,y,color)
dfs(x,y-1,color)
dfs(x,y+1,color)
return True
else:
return False
n = int(sys.stdin.readline())
picture = []
count = []
for _ in range(n):
picture.append(list(sys.stdin.readline().rstrip()))
for color in ['R','G','B','RG']:
temp = 0
for i in range(n):
for j in range(n):
if dfs(i,j,color) == True:
temp += 1
count.append(temp)
print(sum(count[:3]), sum(count[2:]))
3. Others' Solutions
import sys
from collections import deque
def bfs(x,y,color):
queue = deque() # 매번 큐 초기화
queue.append((x,y))
while(queue):
x,y = queue.popleft()
if color == 'R' or color == 'G':
picture[x][y] = 'RG'
else:
picture[x][y] = 'v'
for dx,dy in d: # 인접한 노드 탐색
nx = x + dx
ny = y + dy
if 0 <= nx < n and 0 <= ny < n and picture[nx][ny] == color: # 인접한 노드 탐색 후 방문처리
picture[nx][ny] = 'v'
queue.append((nx,ny))
return True
n = int(sys.stdin.readline())
d = [(-1,0),(1,0),(0,-1),(0,1)]
count = []
picture = []
for _ in range(n):
picture.append(list(sys.stdin.readline().rstrip()))
for color in ['R','G','B','RG']:
temp = 0
for i in range(n):
for j in range(n):
if picture[i][j] == color:
if bfs(i, j,color) == True:
temp += 1
count.append(temp)
print(sum(count[:3]), sum(count[2:]))
from collections import deque
from copy import deepcopy
def bfs(y, x, color):
queue = deque()
queue.append((y, x))
while queue:
y, x = queue.popleft()
for dy, dx in d:
Y, X = y+dy, x+dx
if (0 <= Y < N) and (0 <= X < N) and t[Y][X] in color:
t[Y][X] = '0'
queue.append((Y, X))
N = int(input())
graph = [list(input()) for _ in range(N)]
d = [(-1, 0), (1, 0), (0, -1), (0, 1)]
for colors in [['R', 'G', 'B'], ["RG", 'B']]:
t, cnt = deepcopy(graph), 0
for i in range(N):
for j in range(N):
for color in colors:
if t[i][j] in color:
bfs(i, j, color)
cnt += 1
print(cnt, end=' ')
4. Learned