Skip to content

Commit 78a252b

Browse files
committed
2021.04.24
1 parent b4100d3 commit 78a252b

File tree

10 files changed

+531
-0
lines changed

10 files changed

+531
-0
lines changed

python/Samsung/11688.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
3+
sys.stdin = open("input.txt", "r")
4+
cnt = 0
5+
def gcd(a,b):
6+
global cnt
7+
cnt+=1
8+
return gcd(b,a%b)+a//b if b else a-1
9+
10+
T = int(input())
11+
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
12+
for test_case in range(1, T + 1):
13+
a,b = map(int,input().split())
14+
cnt = 0
15+
print("#"+str(test_case),gcd(a,b)-1)
16+
print(cnt)

python/Samsung/1949.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import sys
2+
sys.stdin = open("input.txt", "r")
3+
4+
d=[(0,1),(1,0),(-1,0),(0,-1)]
5+
6+
def getHighest():
7+
global N
8+
ret = []
9+
hi = -1e10
10+
for y in range(N):
11+
for x in range(N):
12+
if arr[y][x]>hi:
13+
ret = [(y,x)]
14+
hi = arr[y][x]
15+
elif arr[y][x]==hi:
16+
ret.append((y,x))
17+
return ret
18+
19+
def dfs(y,x):
20+
global N
21+
visited = [[0]*N for _ in range(N)]
22+
visited[y][x] = 1
23+
st = [(y,x,1)]
24+
ret = 0
25+
while st:
26+
y,x,l = st.pop()
27+
ret = max(ret,l)
28+
for dy,dx in d:
29+
ny,nx = y+dy,x+dx
30+
if ny<0 or ny>=N or nx<0 or nx>=N or visited[ny][nx]>=l: continue
31+
if arr[ny][nx]<arr[y][x]:
32+
st.append((ny,nx,l+1))
33+
visited[ny][nx]=l+1
34+
return ret
35+
36+
def sol():
37+
global K,N
38+
ans = 1
39+
h_list = getHighest()
40+
for y in range(N):
41+
for x in range(N):
42+
for i in range(1,K+1):
43+
arr[y][x]-=i
44+
for ty,tx in h_list:
45+
ans = max(ans,dfs(ty,tx))
46+
arr[y][x]+=i
47+
return ans
48+
49+
T = int(input())
50+
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
51+
for test_case in range(1, T + 1):
52+
N, K = map(int,input().split())
53+
arr = [list(map(int,input().split())) for _ in range(N)]
54+
print("#"+str(test_case),sol())

python/Samsung/1953.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import sys
2+
3+
4+
direction = {0:[],1:[(1,0),(-1,0),(0,1),(0,-1)], 2:[(1,0),(-1,0)], 3:[(0,1),(0,-1)],
5+
4:[(-1,0),(0,1)], 5:[(1,0),(0,1)], 6:[(1,0),(0,-1)], 7:[(-1,0),(0,-1)]}
6+
7+
state = {"r":0, "c":0, "t":0}
8+
que = []
9+
10+
sys.stdin = open("input.txt", "r")
11+
12+
T = int(sys.stdin.readline().strip("\n"))
13+
14+
for test_case in range(1, T+1):
15+
h = sys.stdin.readline().strip("\n").split(" ")
16+
N, M, R, C, L = int(h[0]), int(h[1]), int(h[2]), int(h[3]), int(h[4])
17+
18+
maps = [[0]*M for _ in range(N)]
19+
visited = [[0]*M for _ in range(N)]
20+
for row in range(N):
21+
l = sys.stdin.readline().strip("\n").split(" ")
22+
for col in range(M):
23+
maps[row][col] = int(l[col])
24+
25+
count = 1
26+
state["r"], state["c"], state["t"] = R, C, 1
27+
que.append(state)
28+
visited[R][C] = 1
29+
while len(que) > 0:
30+
curr_state = que.pop(0)
31+
curr_r, curr_c, curr_t = curr_state["r"], curr_state["c"], curr_state["t"]
32+
if curr_t >= L:
33+
continue
34+
for h, v in direction[maps[curr_r][curr_c]]:
35+
next_r, next_c, next_t = curr_r+h, curr_c+v, curr_t+1
36+
37+
can_move = (next_r < N) and (next_r >= 0) and (next_c < M) and (next_c >= 0)
38+
if (can_move == True):
39+
is_open = False
40+
for h, v in direction[maps[next_r][next_c]]:
41+
tmp_r, tmp_c = next_r+h, next_c+v
42+
if (tmp_r==curr_r) and (tmp_c==curr_c):
43+
is_open = True
44+
if (visited[next_r][next_c] < 1) and (is_open==True):
45+
new_state = {"r":next_r, "c":next_c, "t":curr_t + 1}
46+
que.append(new_state)
47+
visited[next_r][next_c] = 1
48+
count += 1
49+
print("#%d %d" %(test_case, count))

python/Samsung/2112.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import sys
2+
sys.stdin = open("input.txt", "r")
3+
4+
D,W,K,ret = 0,0,0,0
5+
6+
def check():
7+
global D,W,K
8+
for w in range(W):
9+
aflag = 0
10+
bflag = 0
11+
flag = False
12+
for i in range(D):
13+
if (arr[w]>>i)&1:
14+
aflag+=1
15+
bflag = 0
16+
else:
17+
bflag+=1
18+
aflag = 0
19+
if aflag==K or bflag==K:
20+
flag = True
21+
break
22+
if not flag:
23+
return False
24+
return True
25+
26+
def sol(idx,k):
27+
global D,W,K,ret
28+
if k>K: return K
29+
if k and check():
30+
return k
31+
if idx==D:
32+
return 100
33+
ret = min(ret,sol(idx+1,k))
34+
temp = 0
35+
#1로 통합
36+
for w in range(W):
37+
temp<<=1
38+
temp|=((arr[w]>>idx)&1)
39+
arr[w] |= (1<<idx)
40+
ret = min(ret,sol(idx+1,k+1))
41+
x = (1<<D)-(1<<idx|1)
42+
#0으로 통합
43+
for w in range(W):
44+
arr[w] &= x
45+
ret = min(ret,sol(idx+1,k+1))
46+
#복구
47+
for w in range(W-1,-1,-1):
48+
arr[w] |= (temp&1)<<idx
49+
temp>>=1
50+
return ret
51+
52+
T = int(input())
53+
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
54+
for test_case in range(1, T + 1):
55+
D, W, K = map(int,input().split())
56+
ret = K
57+
arr = [0]*W
58+
for d in range(D):
59+
for idx,x in enumerate(list(map(int,input().split()))):
60+
arr[idx]<<=1
61+
arr[idx] = arr[idx]|x
62+
ans = 0
63+
if not check():
64+
ans = sol(0,0)
65+
print("#"+str(test_case),ans)

python/Samsung/2382.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import sys
2+
sys.stdin = open("input.txt", "r")
3+
4+
#상하좌우 y,x
5+
d = [(-1,0),(1,0),(0,-1),(0,1)]
6+
7+
T = int(input())
8+
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
9+
for test_case in range(1, T + 1):
10+
N, M, K = map(int,input().split())
11+
st = {}
12+
for _ in range(K):
13+
y,x,cnt,dir = map(int,input().split())
14+
st[(y,x)]=(cnt,dir-1)
15+
for t in range(M):
16+
new_st = {}
17+
for key,value in st.items():
18+
y,x = key
19+
cnt,dir = value
20+
dy,dx = d[dir]
21+
ny,nx = y+dy,x+dx
22+
if ny==0 or ny==N-1 or nx==0 or nx==N-1:
23+
cnt>>=1
24+
dir^=1
25+
if cnt:
26+
new_st[(ny,nx)]=[(cnt,dir)]
27+
else:
28+
if (ny,nx) in new_st:
29+
new_st[(ny,nx)].append((cnt,dir))
30+
else:
31+
new_st[(ny,nx)]=[(cnt,dir)]
32+
st = {}
33+
for key,value in new_st.items():
34+
if len(value)>1:
35+
nCnt,nDir = 0,0
36+
sumCnt = 0
37+
for c,dir in value:
38+
if c>nCnt:
39+
nDir = dir
40+
nCnt = c
41+
sumCnt+=c
42+
st[key]=(sumCnt,nDir)
43+
else:
44+
st[key]=value[0]
45+
ans = 0
46+
for v in st.values():
47+
ans+=v[0]
48+
print("#"+str(test_case),ans)

python/Samsung/2383.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import sys
2+
sys.stdin = open("input.txt", "r")
3+
4+
def getTime(stair,t):
5+
# sorted stair
6+
inStair = []
7+
idx = 0
8+
ret = 0
9+
while idx<len(stair):
10+
nowP = stair[idx]
11+
if len(inStair)<3:
12+
inStair.append(nowP+t)
13+
ret = nowP+t
14+
else:
15+
if inStair[0]<=nowP:
16+
inStair.pop(0)
17+
inStair.append(nowP+t)
18+
ret = nowP+t
19+
else:
20+
tmp = inStair.pop(0)
21+
inStair.append(tmp+t)
22+
ret = tmp+t
23+
idx+=1
24+
return ret
25+
26+
def distanse(py,px,num):
27+
y,x = stairs[num]
28+
return abs(py-y)+abs(px-x)
29+
30+
def check():
31+
global bit,L
32+
ch = [[],[]]
33+
for idx in range(L):
34+
py,px = p[idx]
35+
c = (bit>>idx)&1
36+
dis = distanse(py,px,c)
37+
ch[c].append(dis+1)
38+
return max(getTime(sorted(ch[0]),time[0]),getTime(sorted(ch[1]),time[1]))
39+
40+
def sol(idx):
41+
global L, bit
42+
if idx==L:
43+
return check()
44+
ret = 1e10
45+
temp = bit
46+
ret = min(sol(idx+1),ret)
47+
bit |= 1<<idx
48+
ret = min(sol(idx+1),ret)
49+
bit = temp
50+
return ret
51+
52+
T = int(input())
53+
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
54+
for test_case in range(1, T + 1):
55+
N = int(input())
56+
p = []
57+
stairs = []
58+
time = []
59+
arr = [list(map(int,input().split())) for _ in range(N)]
60+
for y in range(N):
61+
for x in range(N):
62+
if arr[y][x]:
63+
if arr[y][x]>1:
64+
stairs.append((y,x))
65+
time.append(arr[y][x])
66+
else:
67+
p.append((y,x))
68+
L = len(p)
69+
bit = 0
70+
print("#"+str(test_case),sol(0))

python/gold1/1285.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys
2+
import copy
3+
input = sys.stdin.readline
4+
5+
N = int(input())
6+
arr = [[0]*N for _ in range(N)]
7+
ans = N*N
8+
for y in range(N):
9+
for idx,ch in enumerate(input().strip()):
10+
if ch=="H":
11+
arr[y][idx]=1
12+
13+
def check():
14+
global ans,N
15+
sum = 0
16+
for y in range(N):
17+
tail = 0
18+
for x in range(N):
19+
if arr[x][y]:
20+
tail+=1
21+
sum+=min(tail,N-tail)
22+
if sum>ans:
23+
return sys.maxsize
24+
return sum
25+
26+
def sol(idx):
27+
if idx==N:
28+
return check()
29+
ret = sys.maxsize
30+
ret = min(sol(idx+1),ret)
31+
for y in range(N):
32+
arr[idx][y]^=1
33+
ret = min(sol(idx+1),ret)
34+
for y in range(N):
35+
arr[idx][y]^=1
36+
return ret
37+
38+
print(sol(0))

0 commit comments

Comments
 (0)