Skip to content

Commit d0b868a

Browse files
authored
Merge pull request #23 from Mingguriguri/minjeong
Minjeong / 4월 4주차 / 5문제
2 parents 4f30bc9 + 534dd8a commit d0b868a

6 files changed

+158
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
m = int(input()) # 수행해야 하는 연산의 수
5+
s = 0 # 비어있는 초기 공집합 S
6+
for _ in range(m):
7+
command = list(map(str, input().strip().split())) # 수행해야 하는 연산 -> all과 empty가 있으므로 리스트로 저장
8+
# 따라서 command[0]: 연산내용 command[1]: 요소
9+
if command[0] == 'add': # 원소 추가 (or)
10+
s |= (1 << int(command[1]))
11+
elif command[0] == 'remove': # 원소 삭제 (not + and)
12+
s &= ~(1 << int(command[1]))
13+
elif command[0] == 'check': # 원소 체크
14+
if s & (1<< int(command[1])):
15+
print(1)
16+
else:
17+
print(0)
18+
elif command[0] == 'toggle': # 원소 토글 (xor)
19+
s ^= (1 << int(command[1]))
20+
elif command[0] == 'all': # 원소 채우기
21+
s = (1 << 21) - 1
22+
elif command[0] == 'empty': #원소 비우기
23+
s = 0
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import sys
2+
sys.setrecursionlimit(10000) #재귀 limit 설정(파이썬 최대 깊이 늘리는 모듈 이용)
3+
4+
input = sys.stdin.readline
5+
6+
# 1. DFS 함수 정의
7+
def dfs(x, y):
8+
# x와 y의 위치가 벗어나거나, 양배추리스트에 없는 위치라면 그냥 반환
9+
if x < 0 or x >= M or y < 0 or y >= N or cabbage_filed[x][y] == 0:
10+
return
11+
12+
# 현재 위치 방문 처리
13+
cabbage_filed[x][y] = 0 # 배추 있던 자리 1->0으로 변경해서 중복 방지
14+
15+
# 상하좌우 위치 탐색
16+
dfs(x+1, y) # 오른쪽 배추 탐색
17+
dfs(x-1, y) # 왼쪽 배추 탐색
18+
dfs(x, y+1) # 위쪽 배추 탐색
19+
dfs(x, y-1) # 아래쪽 배추 탐색
20+
21+
22+
T = int(input()) # 테스트케이스 수
23+
# 2. 입력 설정 및 초기화
24+
for _ in range(T):
25+
M, N, K = map(int, input().strip().split()) # M: 가로길이, N: 세로길이, K: 배추개수
26+
cabbage_filed = [[0] * N for _ in range(M)] # 양배추밭 리스트 초기화
27+
28+
# 3. 배추 위치 설정
29+
for _ in range(K):
30+
x, y = map(int, input().strip().split())
31+
cabbage_filed[x][y] = 1 # 입력받은 x, y 위치에 배추가 있으므로 1로 변경
32+
33+
worms = 0 # 지렁이 필요 수 초기화
34+
35+
# 4. DFS로 연결된 배추 탐색 & 지렁이 수 계산
36+
for i in range(M):
37+
for j in range(N):
38+
if cabbage_filed[i][j] == 1: # 배추가 심어져 있고 아직 방문하지 않은 경우
39+
worms += 1 # 지렁이 수 +1
40+
dfs(i, j)# dfs 호출하여 모든 연결된 배추 방문 처리
41+
42+
43+
# 5. 결과 출력
44+
print(worms) # 현재 테스트케이스에 대한 지렁이 수 출력
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import sys
2+
sys.setrecursionlimit(10000) #재귀 limit 설정(파이썬 최대 깊이 늘리는 모듈 이용)
3+
4+
input = sys.stdin.readline
5+
6+
# 1. DFS 함수 정의
7+
def dfs(x, y):
8+
# x와 y의 위치가 벗어나거나, 양배추리스트에 없는 위치라면 그냥 반환
9+
if x < 0 or x >= M or y < 0 or y >= N or cabbage_filed[x][y] == 0:
10+
return
11+
12+
# 현재 위치 방문 처리
13+
cabbage_filed[x][y] = 0 # 배추 있던 자리 1->0으로 변경해서 중복 방지
14+
15+
# 상하좌우 위치 탐색
16+
dfs(x+1, y) # 오른쪽 배추 탐색
17+
dfs(x-1, y) # 왼쪽 배추 탐색
18+
dfs(x, y+1) # 위쪽 배추 탐색
19+
dfs(x, y-1) # 아래쪽 배추 탐색
20+
21+
22+
T = int(input()) # 테스트케이스 수
23+
# 2. 입력 설정 및 초기화
24+
for _ in range(T):
25+
M, N, K = map(int, input().strip().split()) # M: 가로길이, N: 세로길이, K: 배추개수
26+
cabbage_filed = [[0] * N for _ in range(M)] # 양배추밭 리스트 초기화
27+
28+
# 3. 배추 위치 설정
29+
for _ in range(K):
30+
x, y = map(int, input().strip().split())
31+
cabbage_filed[x][y] = 1 # 입력받은 x, y 위치에 배추가 있으므로 1로 변경
32+
33+
worms = 0 # 지렁이 필요 수 초기화
34+
35+
# 4. DFS로 연결된 배추 탐색 & 지렁이 수 계산
36+
for i in range(M):
37+
for j in range(N):
38+
if cabbage_filed[i][j] == 1: # 배추가 심어져 있고 아직 방문하지 않은 경우
39+
worms += 1 # 지렁이 수 +1
40+
dfs(i, j)# dfs 호출하여 모든 연결된 배추 방문 처리
41+
42+
43+
# 5. 결과 출력
44+
print(worms) # 현재 테스트케이스에 대한 지렁이 수 출력
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
nums = input()
2+
nums_list = nums.split('-') # 1. 먼저 -를 기준으로 나눈다.
3+
4+
for i, n in enumerate(nums_list):
5+
num_plus = list(map(int, n.split('+'))) # 2. +를 기준으로 나눈 후, 리스트에 int로 바꿔 저장한다.
6+
# 저장형태: [55, [50, 50]]
7+
nums_list[i] = sum(num_plus) # 3. 바꾼 int형을 더한 값을 원래의 식이 있는 리스트에 저장한다.
8+
9+
result = nums_list[0]
10+
for i in range(1, len(nums_list)): # 4. 나머지 값들을 - 연산한다.
11+
result -= nums_list[i]
12+
13+
print(result)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N, M = map(int, input().strip().split())
5+
nums = list(map(int, input().strip().split()))
6+
prefix = [0] * (N+1)
7+
8+
# 누적합 구하기
9+
for i in range(len(nums)):
10+
prefix[i+1] = nums[i] + prefix[i]
11+
12+
# 구간합 구하기 (누적합 - 구간)
13+
for _ in range(M):
14+
start, end = map(int, input().strip().split())
15+
result = prefix[end] - prefix[start-1] # 누적
16+
print(result)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import sys
2+
input = sys.stdin.readline
3+
# N: 온도를 측정한 전체 날짜 수 / K: 연속적인 날짜의 수
4+
N, K = map(int, input().strip().split())
5+
temp = list(map(int, input().strip().split())) # 온도 리스트
6+
prefix_sum = [0] * (N+1) # 누적합 리스트
7+
section = N - K + 1 # 구간합 리스트를 초기화하기 위한 크기
8+
range_sum = [0] * section # 구간합 리스트
9+
10+
# 누적합 구하기
11+
for i in range(len(temp)):
12+
prefix_sum[i+1] = temp[i] + prefix_sum[i]
13+
14+
# 구간합 구하기
15+
for i in range(K, section+K):
16+
range_sum[i-K] = prefix_sum[i] - prefix_sum[i-K]
17+
18+
print(max(range_sum)) # K일의 온도의 합이 최대가 되는 값

0 commit comments

Comments
 (0)