Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 알고리즘
- TF-IDF
- 웹스크래핑
- 데이터 엔지니어링
- 웹크롤링
- selenium
- 추천시스템
- 추천 시스템
- 협업 필터링
- 코테
- SGD
- 시각화
- coursera
- 데이터
- pytorch
- 딥러닝
- 부스트캠프
- Cosine-similarity
- Python
- wordcloud
- 파이썬
- recommendation system
- 분산 시스템
- 머신러닝
- Tensor
- codingtest
- 코딩테스트
- 백준
- Overfitting
- 프로그래머스
Archives
- Today
- Total
개발자식
[백준] 자료구조_17103, 17087, 10828, 9012, 10773, 1935, 1406, 10799 본문
Algorithm/Baekjoon
[백준] 자료구조_17103, 17087, 10828, 9012, 10773, 1935, 1406, 10799
밍츠 2022. 9. 1. 09:50골드바흐 파티션
- 코드
import math
def get_primary_list(n):
array = [1 for _ in range(n+1)]
for i in range(2, int(math.sqrt(n))+1):
k = 2
if array[i]:
while k * i <= n:
array[k*i] = False
k+=1
return array
n = int(input())
nums = [int(input()) for _ in range(n)]
max_num = max(nums)
primarys = get_primary_list(max_num)
for num in nums:
result = 0
for i in range(2, num // 2 + 1):
if primarys[i] and primarys[num - i]:
result += 1
print(result)
- 풀이를 생각해낸 과정
- 에라토스테네스의 채를 이용하여 소수 여부를 판단하고, 시간 초과로 인해 구하는 과정을 함수로 뺀다.
- 시간복잡도 계산
- O(N^2)
숨바꼭질 6
- 코드
def get_gcd(a,b):
if a < b:
a, b = b, a
while a > 0:
b, a = a, b%a
return b
n , s = map(int,input().split())
arr = list(map(int,input().split()))
temp = []
for i in arr:
temp.append(abs(s-i))
gcd = temp[0]
for i in range(1,len(temp)):
gcd = get_gcd(gcd,temp[i])
print(gcd)
- 풀이를 생각해낸 과정
- 수빈의 위치에서 각 동생의 위치의 차의 절대값을 리스트에 넣고 이 값들의 최대 공약수가 가능한 D의 최대 값을 보장한다.
- 시간복잡도 계산
- O(N)
스택
- 코드
import sys
input = sys.stdin.readline
n = int(input())
count = 0
arr = []
while count < n:
count +=1
cmd = input().split()
length = len(arr)
if cmd[0] == "push":
arr.append(int(cmd[1]))
elif cmd[0] == "empty":
if length == 0:
print("1")
else:
print("0")
elif cmd[0] == "pop":
if length == 0:
print("-1")
else:
print(arr.pop())
elif cmd[0] == "size":
print(len(arr))
elif cmd[0] == "top":
if length == 0:
print("-1")
else:
print(arr[-1])
- 풀이를 생각해낸 과정
- if~elif로 해당 명령어 각각 처리
- append() : O(1)
- pop() : O(1)
- 시간 초과 해결
- import sys 로 입력 받기
- 입력받을 때 split(” “) 처리해주기
- 시간복잡도 계산
- O(N)
괄호
- 코드
import sys
input = sys.stdin.readline
n = int(input())
for i in range(n):
vps = input()
check = []
for j in range(len(vps)):
if vps[j] == "(":
check.append(1)
elif vps[j] == ")":
if check == []:
print("NO")
break
else: check.pop()
elif j == len(vps)-1:
if check == []:
print("YES")
else:
print("NO")
- 풀이를 생각해낸 과정
- “(” 개수 만큼 “)”가 존재해야 한다
- “(” 일 때는 리스트에 1을 추가해주고, ”)” 일 때는 리스트가 비워져 있다면 NO를 출력하고 해당 반복문 종료 아니라면 pop을 실행한다.
- 원소의 마지막일 때 비워져 있다면 YES, 아니라면 NO
- 시간복잡도 계산
- O(N^2)
제로
- 코드
import sys
input = sys.stdin.readline
n = int(input())
money = []
for i in range(n):
m = int(input())
if m == 0:
money.pop()
else:
money.append(m)
print(sum(money))
- 풀이를 생각해낸 과정
- 입력 값이 0일 때 지울 수 있는 수가 있음을 보장한다는 문제 조건이 있으므로 리스트 확인 안해도 됨
- 리스트의 pop과 append 함수를 이용하여 구현 후, sum 함수로 최종 합을 구한다.
- 시간복잡도 계산
- O(N)
후위 표기식2
- 코드
def calculations(c, arr):
num1 = arr.pop()
num2 = arr.pop()
if c == "+":
op.append(num2 + num1)
if c == "-":
op.append(num2 - num1)
if c == "*":
op.append(num2 * num1)
if c == "/":
op.append(num2 / num1)
n = int(input())
notation = input()
dic = {}
op = []
for i in range(n):
k = int(input())
dic[chr(65+i)] = k
for i in notation:
if i.isalpha():
op.append(dic[i])
else:
calculations(i, op)
print("%.2f"%op[0])
- 풀이를 생각해낸 과정
- 후위 표기법 참고
- 알파벳이면 딕셔너리에 저장된 해당 알파벳 숫자를 리스트에 저장한다. (append)
- 연산자이면 리스트에서 마지막에 담긴 2개 숫자를 꺼내고(pop) 해당 연산 계산 후 결과를 리스트에 저장한다.
- 최종적으로 남아있는 리스트 값을 출력한다.
- ‘%.2f’ % 함수를 이용하여 소수점 자릿수를 제한한다.
- 후위 표기법 참고
- 시간복잡도 계산
- O(N)
에디터
- 코드
import sys
input = sys.stdin.readline
sl = list(input().rstrip())
n = int(input())
sr = []
for i in range(n):
cmd= input().split()
if cmd[0] == "L":
if sl:
sr.append(sl.pop())
if cmd[0] == "D":
if sr:
sl.append(sr.pop())
if cmd[0] == "B":
if sl:
sl.pop()
if cmd[0] == "P":
sl.append(cmd[1])
sl.extend(reversed(sr))
print(''.join(sl))
-
- rstrip()으로 ‘\n’ 제거
- 커서를 기준으로 리스트를 나누어서 계산하여 pop, append만 이용해서 시간 복잡도를 줄일 수 있다.
- sr에 값이 아무것도 존재하지 않는다면 sr.reverse() 는 TypeError를 띄우기 때문에 reversed(sr)를 사용하여 리스트를 뒤집어준다.풀이를 생각해낸 과정
- 시간복잡도 계산
- O(N)
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 힙, 재귀함수_11866, 1927, 11286, 5430, 10870, 17478, 1914, 11729 (0) | 2022.09.01 |
---|---|
[백준] 자료구조_2493, 17298, 2812, 10845, 2164, 10866, 1021, 1966 (0) | 2022.09.01 |
[백준] 수학_15650, 1037, 2981, 1789, 2407, 15663, 15657, 2824 (0) | 2022.09.01 |
[백준] 수학_4948, 15649, 2609, 9020, 11653, 6588, 1182, 6603 (0) | 2022.09.01 |
[백준] 수학_8393, 1929, 1978, 2748 (0) | 2022.09.01 |
Comments