diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" new file mode 100644 index 0000000..41577ac --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" @@ -0,0 +1,77 @@ +#2023-05-18-Week6-과제 +#10026_적록색약 + +''' +입력 : +1. 입력 크기 1 ≤ N ≤ 100 +2. 그리드 입력 (N*N) + +출력 : +적록색약 아닌 사람의 구역, 적록색약인 사람의 구역 +''' + + + + +#런타임 에러 발생 + +from collections import deque +import sys +import string + +sys.setrecursionlimit(100000) #재귀 +# input=sys.stdin.readline() -> 한 줄 단위 입력 +input=sys.stdin.readline + +N = int(input()) +matrix = [list(input().rstrip()) for i in range(N)] + +visited = [[0]*N for i in range(N)] #방문 안 한 상태로 설정 + + +def dfs(x,y) : + + move_x = [-1,1,0,0] + move_y = [0,0,-1,1] + + color = matrix[x][y] #R, G, B + visited[x][y] = True #방문 + + for i in range(4) : #상하좌우 + new_x = x + move_x[i] + new_y = y + move_y[i] + if (0 <= new_x <= N - 1) and (0 <= new_y <= N - 1) and (visited[new_x][new_y] == False): + if color == matrix[new_x][new_y] : + dfs(new_x,new_y) + +#정상 +normal = 0 + +for x in range(N) : + for y in range(N) : + if visited[x][y] == False : + dfs(x,y) + normal += 1 + +#적록색약 +noRG = 0 +for x in range(N) : #적록색약 기준으로 색 변경 + for y in range(N) : + if matrix[x][y] == 'R' or matrix[x][y] == 'G' : + matrix[x][y] = 'g' + +visited = [[0]*N for i in range(N)] #방문횟수 초기화 +for x in range(N) : + for y in range(N) : + if visited[x][y] == False : + dfs(x,y) + noRG += 1 + +#출력 +print(normal, noRG) + + + + + + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/15651_N\352\263\274 M(3).py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/15651_N\352\263\274 M(3).py" new file mode 100644 index 0000000..0fb7af3 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/15651_N\352\263\274 M(3).py" @@ -0,0 +1,17 @@ +#15651_N과 M(3) +# -> 런타임에러 발생 +N, M = map((int, input()).split()) + +list = [] + +def func() : + if len(list) < M : + for i in range(1, N+1) : + list.append(i) + func() + list.pop() + + else : + print(*list) + +func() \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/15723_n\353\213\250 \353\205\274\353\262\225.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/15723_n\353\213\250 \353\205\274\353\262\225.py" new file mode 100644 index 0000000..1057d42 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/15723_n\353\213\250 \353\205\274\353\262\225.py" @@ -0,0 +1,50 @@ +#2023-05-18-Week6-과제 +#15723_n단 논법 + +''' +n개의 전제가 있을 때 m개의 결론을 도출 + +입력 : +정수 n(2 ≤ n ≤ 26) +둘째 줄부터 n개의 줄에 걸쳐 각 줄에 전제가 하나씩 +a is b의 형식 +a는 b이면서 c일 수 없으나, a와 b가 동시에 c일 수는 있다. + +출력 : +m개의 줄에 걸쳐 각 줄에 결론이 참인지 거짓인지 +''' + + +#런타임 에러 발생 + +import sys +input = sys.stdin.readline + +N = int(input()) +graph = [[0] * 26 for i in range(26)] + + +#입력한 알파벳 순서를 어떻게 정해야할까............. +order = "abcdefghijklmnopqrstuvwxyz" #알파벳 문자열의 인덱스로..? + + +for i in range(N) : + a, b = map(order.index, input().strip().split(" is ")) + graph[a][b] = 1 + +for i in range(26) : + for j in range(26) : + for k in range(26) : + if graph[j][k] < graph[j][i] + graph[i][k] : + graph[j][k] = graph[j][k] + else : + graph[j][k] = graph[j][i] + graph[i][k] + +M = int(input()) + +for i in range(M) : + a, b = map(order.index, input().strip().split(" is ")) + if graph[a][b] != 0 : + print('T') + else : + print('F') \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" new file mode 100644 index 0000000..e9211ce --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" @@ -0,0 +1,49 @@ +#2023-05-25-Week7-과제 +#1654_랜선 자르기 + +''' +가지고 있는 K개의 랜선을 잘라서 +N개의 같은 길이 랜선으로 만들기 +-> K=300일 때 N의 길이가 140이면 N=2, 20은 버려짐 + +기존 K개의 랜선으로 N개를 만들 수는 없음 +자를 때는 정수 단위로만 자름 + +N개보다 많이 만드는 것도 N개를 만드는 것에 포함 + + +입력 1 : 이미 가지고 있는 K개, 필요한 랜선 N개 +(1<=K<=10000 1<=N<=1000000 K<=N) +입력 2 : 이미 가지고 있는 K개의 랜선 각 길이 + +랜선의 길이는 자연수<=2^31 -1 + +출력 : N개를 만들 수 있는 랜선의 최대 길이 +''' + + +import sys +K, N = map(int, sys.stdin.readline().split()) + +array = [] + +for i in range(K): + array.append(int(sys.stdin.readline())) + +start = 1 # 최소 1 +end = max(array) # 최대 + +while (start <= end): # 이분탐색 + # --> start와 end가 동일하면 탈출 = 최대 랜선 길이 발견 + mid = (start + end) // 2 # 중간 지점 값 + cnt = 0 # 랜선 개수 0 + for i in range(K) : + cnt += array[i] // mid # 랜선을 중간 값으로 나누어 개수 파악 + if cnt >= N : # 랜선 개수가 목표 이상 = 중간 기준으로 오른쪽 탐색 + start = mid + 1 + else : # 랜선 개수가 목표 미만 = 중간 기준으로 왼쪽 탐색 + end = mid - 1 + +print(end) + + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" new file mode 100644 index 0000000..fa0b932 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" @@ -0,0 +1,61 @@ +#2023-05-25-Week7-과제 +#1931_회의실 배정 + +''' +한 개의 회의실을 사용하려는 N개의 회의에 대한 사용표 +시작시간, 종료시간 고정 +시간이 겹치지 않게 회의실 사용하는 최대 회의 개수 + +* 중간 중단 x +* 종료 동시에 다음 회의 시작 o +* 회의 시작하자마자 종료 o +* 시작시간 종료시간 0<=자연수<=2^31 -1 + +입력 1 : 회의 개수 1<=N<=100000 +입력 2 : 회의 정보 -> 시작 공백 종료 + +출력 : 회의 최대 개수 +''' + +''' +1. 시작시간이 빠른 순서 -> 시작시간이 같은 경우 = 종료시간이 빠른 순서 + (2,3) (2,7) :: (2,3) -> (2,7) +2. 종료시간이 빠른 순서 -> 종료시간이 같은 경우 = 시작시간이 빠른 순서 + (7,7) (2,7) :: (2,7) -> (7,7) + +(2,7) (3,5) (6,7) 입력시 +by 1번 :: (2,7) 회의 1개 +by 2번 :: (3,5) (6,7) 회의 2개 + +--> 종료 시간이 빠른 순서, + 같은 경우에는 시작 시간이 빠른 순서 +''' + + +### 런타임 에러(23-05-30) -> 시간 정렬 순서 변경함 (23-06-01) + +import sys +N = int(sys.stdin.readline()) + +time = [] +# 시간 저장하는 리스트 +# -> 처음부터 공간을 할당 받고 시작? 입력 받은 만큼 append? + +cnt = 0 # 출력할 회의 개수 + +for _ in range(N): + start, end = map(int, sys.stdin.readline().split()) + time.append([start, end]) + +time = sorted(time, key = lambda time: time[0]) # 시작 시간 sort +time = sorted(time, key = lambda time: time[1]) # 종료 시간 sort + +final = 0 # 마지막 회의 시간 + +for i, j in time: + if i >= final: # 시작 >= 마지막 회의 + cnt += 1 + final = j # 갱신 + +print(cnt) + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/2839_\354\204\244\355\203\225 \353\260\260\353\213\254.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/2839_\354\204\244\355\203\225 \353\260\260\353\213\254.py" new file mode 100644 index 0000000..f916430 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/2839_\354\204\244\355\203\225 \353\260\260\353\213\254.py" @@ -0,0 +1,16 @@ +# 2839_설탕 배달 +# -> 정답 + +N = int(input()) +count = 0 + +while N >= 0: + if N % 5 == 0 : # 전체 무게의 합을 5로 나누었을 때 나누어 떨어지면 + count += N // 5 # 그 몫 만큼 봉지 추가 + print (count) # 총 봉지 수 출력 + break + N -= 3 # 전체 무게의 합에서 3 빼기 + count += 1 # 3kg 봉지 한 개 추가 + + if N < 0 : # 봉지를 만들 수 없는 음수 + print(-1) # -1 출력 \ No newline at end of file