Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions Class3/AC/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# AC

solved_ac[Class3] [AC](https://www.acmicpc.net/problem/5430)

## 문제

선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.

함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.

함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다.

배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.





## 입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.

각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.

다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)

다음 줄에는 [x1,...,xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. (1 ≤ xi ≤ 100)

전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.



## 출력

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.




## 예제 입력 1

```
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
```

## 예제 출력 1

```
[2,1]
error
[1,2,3,5,8]
error
```
58 changes: 58 additions & 0 deletions Class3/AC/donghyeok1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import queue
import sys
from collections import deque

# def reverse(queue):
# list_len = len(queue)
# for i in range(list_len // 2):
# tmp = queue[list_len - 1 - i]
# queue[list_len-1-i] = queue[i]
# queue[i] = tmp


def print_list(result):

while True:
if result == "error":
print("error",end="")
break
print("[",end="")
for i in range(len(result)-1):
print(str(result[i]) + ",",end="")
print(str(result[len(result)-1]) + "]",end="")
break

T = int(sys.stdin.readline())

result = [[] for _ in range(T)]
input_string = [[] for _ in range(T)]
for i in range(T):
queue = deque()

input_string[i] = list(sys.stdin.readline())

len_list = int(sys.stdin.readline())
list_a = sys.stdin.readline()
list_a = (list_a.replace("[", "").replace(","," ").replace("]","")).split()
for k in range(len(list_a)):
queue.append(list_a[k])

if len_list != len(list_a):
result[i] = "error"
continue
for func in input_string[i]:
if func == "R":
queue.reverse()
elif func == "D":
a = len(queue)
if len(queue) == 0:
result[i] = "error"
break
queue.popleft()
if result[i] != "error":
result[i] = queue

for j in range(T):
print_list(result[j])
print()

37 changes: 37 additions & 0 deletions Class3/숨바꼭질/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 숨바꼭질

solved_ac[Class3] [숨바꼭질](https://www.acmicpc.net/problem/1697)

## 문제

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.

수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.



## 입력

첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.



## 출력

수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.





## 예제 입력 1

```
5 17
```

## 예제 출력 1

```
4
```
37 changes: 37 additions & 0 deletions Class3/숨바꼭질/donghyeok1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import sys
from collections import deque

N, K = map(int, sys.stdin.readline().split())
visited = [False] * 100001

def bfs(N, K, visited):
queue = deque()
queue.append([N, 0])
visited[N] = True
if N == K:
print(0)
return

while queue:
path, second = queue.popleft()

if K == path:
print(second)
break
else:
for edit_path in ((path + 1), (path - 1), (path * 2)):
if 0 <= edit_path <= 100000 and visited[edit_path] == False:
queue.append([edit_path, second + 1])
visited[edit_path] = True




\


bfs(N, K, visited)




75 changes: 75 additions & 0 deletions Class3/유기농 배추/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# 유기농 배추

solved_ac[Class3] [유기농 배추](https://www.acmicpc.net/problem/1012)

## 문제

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는 것이다.

한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 몇 군데에 퍼져있는지 조사하면 총 몇 마리의 지렁이가 필요한지 알 수 있다. 예를 들어 배추밭이 아래와 같이 구성되어 있으면 최소 5마리의 배추흰지렁이가 필요하다. 0은 배추가 심어져 있지 않은 땅이고, 1은 배추가 심어져 있는 땅을 나타낸다.

![캡처](https://user-images.githubusercontent.com/95459089/170838589-ac41bc36-18d4-42eb-b51d-db2ab238b103.PNG)


## 입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다. 두 배추의 위치가 같은 경우는 없다.



## 출력

각 테스트 케이스에 대해 필요한 최소의 배추흰지렁이 마리 수를 출력한다.




## 예제 입력 1

```
2
10 8 17
0 0
1 0
1 1
4 2
4 3
4 5
2 4
3 4
7 4
8 4
9 4
7 5
8 5
9 5
7 6
8 6
9 6
10 10 1
5 5
```

## 예제 출력 1

```
5
1
```
## 예제 입력 2

```
1
5 3 6
0 2
1 2
2 2
3 2
4 2
4 0
```
## 예제 출력 2

```
2
```
43 changes: 43 additions & 0 deletions Class3/유기농 배추/donghyeok1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import sys
from collections import deque

#BFS 쓸거다
#입력 받아서 그림처럼 그래프화 함
#1을 처음 발견하면 count += 1 하고 BFS해서 0으로 만들어버림. 그러면 visited도 사용 안해도됨

T = int(sys.stdin.readline())

def bfs(graph, y, x):
queue = deque()
queue.append([y, x])
dx = [-1, 0, 0, 1]
dy = [0, 1, -1, 0]
#상 하 좌 우 검색
while queue:
y, x = queue.popleft()
for i in range(4):
new_y = y + dy[i]
new_x = x + dx[i]
if N > new_y >= 0 and M > new_x >= 0 and graph[new_y][new_x] == 1:
graph[new_y][new_x] = 0
queue.append([new_y, new_x])




for i in range(T):
M, N, K = map(int, sys.stdin.readline().split())
graph = [[0]*M for _ in range(N)]
for j in range(K):
x, y = map(int, sys.stdin.readline().split())
graph[y][x] = 1
count = 0
for y in range(N):
for x in range(M):
if graph[y][x] == 1:
bfs(graph, y, x)
count += 1
print(count)



60 changes: 60 additions & 0 deletions Class3/최대 힙/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 최대 힙

solved_ac[Class3] [최대 힙](https://www.acmicpc.net/problem/11279)

## 문제

널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.

1. 배열에 자연수 x를 넣는다.
2. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다.


프로그램은 처음에 비어있는 배열에서 시작하게 된다.


## 입력

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 큰 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 자연수는 231보다 작다.



## 출력

입력에서 0이 주어진 회수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 큰 값을 출력하라고 한 경우에는 0을 출력하면 된다.




## 예제 입력 1

```
13
0
1
2
0
0
3
2
1
0
0
0
0
0
```

## 예제 출력 1

```
0
2
1
3
2
1
0
0
```

Loading