diff --git a/src/choeunsin/10815.py b/src/choeunsin/10815.py new file mode 100644 index 0000000..ef17f63 --- /dev/null +++ b/src/choeunsin/10815.py @@ -0,0 +1,30 @@ +# 숫자카드 +import sys + +N = int(input()) +n_data = list(map(int, sys.stdin.readline().rstrip().split())) +M = int(input()) +m_data = list(map(int, sys.stdin.readline().rstrip().split())) + +# 오름차순 정렬 +n_data.sort() + +for i in range(M): + start = 0 + end = len(n_data) - 1 + + # 이분탐색을 이용한 값 구하기 + while start < end: + middle = int((start + end) / 2) + if n_data[middle] >= m_data[i]: + end = middle + else: + start = middle + 1 + + # n_data에 정해진 값이 존재하는지 확인 + if n_data[start] == m_data[i]: + m_data[i] = 1 + else: + m_data[i] = 0 + +print(*m_data) \ No newline at end of file diff --git a/src/choeunsin/1644.py b/src/choeunsin/1644.py new file mode 100644 index 0000000..5cce315 --- /dev/null +++ b/src/choeunsin/1644.py @@ -0,0 +1,40 @@ +# 소수의 연속합 +def isPrimeNumber(n): + # 에라토스테네스의 체 초기화: n개 요소에 True 설정 + check = [True] * n + + # n의 제곱근 + m = int(n ** 0.5) + for i in range(2, m + 1): + # i가 소수일 때 + if check[i] == True: + # i이후 i의 배수들을 False로 변환(소수가 아님) + for j in range(i + i, n, i): + check[j] = False + + # 소수 목록 리스트로 리턴 + return [i for i in range(2, n) if check[i] == True] + +N = int(input()) +data = isPrimeNumber(N+1) #2부터 N까지 소수로 이루어진 리스트 + +count = 0 # 합이 M이 되는 경우의 수 +fir = 0 # 첫번째 포인터 +sec = 0 # 두번째 포인터 +now = 0 # 현재 합 + +while (sec <= len(data)): + #첫번째부터 두번째까지 data의 합 저장 + now = sum(data[fir:sec]) + # 합이 목표값보다 크면 첫번째 포인터의 기준에서는 더 구할 값이 없음 + # 첫번째 포인터 한 칸 이동 + if now > N: + fir += 1 + # 합이 목표값보다 크지 않으면 두번째 포인터 한칸 이동 + else: + # 합이 목표값과 같으면 count++ + if now == N: + count += 1 + sec += 1 + +print(count) \ No newline at end of file diff --git a/src/choeunsin/1822.py b/src/choeunsin/1822.py new file mode 100644 index 0000000..40cff87 --- /dev/null +++ b/src/choeunsin/1822.py @@ -0,0 +1,30 @@ +# 차집합 +import sys + +A, B = map(int, sys.stdin.readline().split()) +a_data = list(map(int, sys.stdin.readline().rstrip().split())) +b_data = list(map(int, sys.stdin.readline().rstrip().split())) + +a_data.sort() +b_data.sort() +answer_list = [] + +for i in range(A): + start = 0 + end = len(b_data) - 1 + + # 이분탐색을 이용한 값 구하기 + while start < end: + middle = int((start + end) / 2) + if b_data[middle] >= a_data[i]: + end = middle + else: + start = middle + 1 + + # a_data에 정해진 값이 존재하지 않으면 answer_list에 추가 + if b_data[start] != a_data[i]: + answer_list.append(a_data[i]) + +print(len(answer_list)) +if len(answer_list) > 0: + print(*answer_list) \ No newline at end of file diff --git a/src/choeunsin/2003.py b/src/choeunsin/2003.py new file mode 100644 index 0000000..6495860 --- /dev/null +++ b/src/choeunsin/2003.py @@ -0,0 +1,26 @@ +# 수들의 합2 +N, M = map(int, input().split()) +data = [*map(int, input().split())] + +count = 0 # 합이 M이 되는 경우의 수 +fir = 0 # 첫번째 포인터 +sec = 0 # 두번째 포인터 +now = 0 # 현재 합 + +while (sec <= N): + #첫번째부터 두번째까지 data의 합 저장 + now = sum(data[fir:sec]) + # 합이 M보다 크면 첫번째 포인터의 기준에서는 더 구할 값이 없음 + # 첫번째 포인터 한 칸 이동 + if now > M: + fir += 1 + # 합이 M보다 크지 않으면 두번째 포인터 한칸 이동 + else: + # 합이 M과 같으면 count++ + if now == M: + count += 1 + sec += 1 + +print(count) + + diff --git a/src/choeunsin/2170.py b/src/choeunsin/2170.py index f5e1f2e..cc59660 100644 --- a/src/choeunsin/2170.py +++ b/src/choeunsin/2170.py @@ -1,12 +1,12 @@ #선 긋기 import sys -N = int(input()) #선을 그은 횟수 +N = int(input()) #선을 그은 횟수 data = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] #선의 시작점, 끝점 -data.sort() #시작점 순서대로 정렬 +data.sort() #시작점 순서대로 정렬 -line = data[0] #그은 선의 시작점, 끝점은 첫번째 배열로 +line = data[0] #그은 선의 시작점, 끝점은 첫번째 배열로 count = line[1] - line[0] #그은 선의 길이는 첫번째 배열의 길이로 for i in range(1, N): diff --git a/src/choeunsin/2836.py b/src/choeunsin/2836.py index 5ea439b..e4bc123 100644 --- a/src/choeunsin/2836.py +++ b/src/choeunsin/2836.py @@ -7,13 +7,13 @@ N, M = map(int, sys.stdin.readline().split()) #손님의 수와 상근의 최종 목적지 거리 입력받기 data = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] #승객들의 출발지/도착지 입력받기 -go_back = [] #반대 방향으로 가는 승객들을 저장할 배열 +go_back = [] #반대 방향으로 가는 승객들을 저장할 배열 for i in range(N): if data[i][0] > data[i][1]: go_back.append([data[i][1], data[i][0]]) #반대방향으로 가는 승객들을 출발지/도착지를 반대로 해서 정방향으로 저장 -go_back.sort() #출발지를 기준 오름차순 정렬 +go_back.sort() #출발지를 기준 오름차순 정렬 #2170의 선긋기와 동일한 go_back의 중복 제거 거리 구하기 line = go_back[0]