BOJ88

★Prefix Sum Upper + Intermediate I - 7 Solved★ ★ 11441 합 구하기 ★import sysinput=sys.stdin.readlineN=int(input())B=[]a=0for i in map(int,input().split()): a+=i B.append(a)for _ in range(int(input())): a,b=map(int,input().split()) if a==1:print(B[b-1]) else:print(B[b-1]-B[a-2]) 🐰 누적합을 구하기 위한 구간을 만든 뒤, 구간 B에서 원하는 구간만큼 바로 indexing으로 B[b-1] - B[a-2] 연산해주면 완료!★ 11659 구간 합 구하기 4 ★ #indexing over slicingN, M = map(int, input().split()).. BOJ/🥈 2023. 1. 18.
★Math Beginner IV - 23 Solved★ ★ 2914 저작권 ★A,I=map(int,input().split())print(A*(I-1)+1) 🔢 올림해서 결과를 내기 때문에 I-1을 곱한다음 1을 더하면 된다.★ 15923 욱제는 건축왕이야!! ★ ans=0N=int(input())l=[]for _ in range(N): x,y=map(int,input().split()) l.append((x,y))for i in range(N): if i==0: x0,y0=l[N-1][0],l[N-1][1] else: x0,y0=l[i-1][0],l[i-1][1] x1,y1=l[i][0],l[i][1] if x0==x1:ans+=(abs(y0-y1)) else:ans+=(abs(x0-x1))print(ans) 🔢 누.. BOJ/🥉 2023. 1. 16.
★PQ 중상급 - 6문제()★ 🧠 priority queue를 구현하기 위한 heap 관련 여러 문제는 기존 자료구조(stack, queue, deck)보다 더 복잡한 tree구조로, 중급 이하의 문제는 없다. 중상급 이상부터 여러 문제를 풀며 적응해보자 🧠 priority queue 관련 개념 포스팅 참고 priority queue - (binary) heap tree 1. concepts> ☝️ 우선순위 큐 = '우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조' ☝️ 데이터를 우선순위에 따라 처리하고 싶을 때 사용 ex) 물건 데이터를 자료구조에 넣었다가 가 sh-avid-learner.tistory.com ★ 1927 최소 힙 ★ import sys import heapq input=sys.stdin.readline .. BOJ/🥈 2023. 1. 11.
★DP Advanced I - 6 Solved★ ★ 2591 숫자카드 ★ n=input()l=len(n)if l==1:print(1)else: dp=[0]*l #dp-table initialization - dp[0], dp[1] dp[0]=1 front_two=int(n[:2]) if front_two =4: dp[i]=0 else: dp[i]=dp[i-2] print(dp[-1]) 👄 dp-table을 전형적인 dp 유형 답게 update하는 유형이나, 맨 마지막 숫자가 0일 경우의 예외를 처리하는 dp 유형! 👄① 길이가 1인 경우 - 숫자 1개로 이루어진 카드 1개 - dp[0] = 1 ② 길이가 2인 경우(1) 앞.. BOJ/🥇 2023. 1. 8.
★Stack & Queue & Deque Upper-Intermediate I - 12 Solved★ ★ 1874 스택 수열 ★ import sysinput = sys.stdin.readlinestack,sequence,ans = [],[],[]cur = 0for _ in range(int(input())): sequence.append(int(input()))sequence = sequence[::-1]while len(sequence) != 0: popped = sequence.pop() if popped > cur: for i in range(cur+1,popped+1): stack.append(i) ans.append('+') cur = popped if popped == stack[-1]: .. BOJ/🥈 2023. 1. 8.
★Bitmasking Intermediate I - 3 Solved★ 🔟 bitmasking 연산은 매우 빠른 연산으로 O(1)의 time complexity를 보이는 경우가 많아 많이 쓰이는 기법 중 하나 🔟 다만, 0과 1을 이용한 2진수 연산이기 때문에 컴퓨터가 실제로 연산하는 하드웨어적인 성격이 들어가므로 단순 연산보다 좀 더 신경을 써야 함 🔟 아래 개념 정리 링크 참조 ☀️bitmasking☀️ * intro> 💧 bitmask = '컴퓨터는 내부적으로 모든 자료를 이진수로 표현. 이 특성을 이용해 정수의 이진수 표현을 자료구조로 쓰는 기법' (엄밀하게 자료구조는 아님) 💧 2진수 관련 bit 연산을 진행 sh-avid-learner.tistory.com 🔟 특히 집합 관련 연산을 사용할 때 bitmasking 기법이 많이 쓰인다. 여러 문제를 통해서 적응하도록.. BOJ/🥈 2023. 1. 5.
★DP Upper-Intermediate I - 15 Solved★ ★ 2579 계단 오르기 ★ # dp 1차원 배열import sysinput=sys.stdin.readlineN=int(input())S=[0]for _ in range(N):S.append(int(input()))if N==1:print(S[1])elif N==2:print(S[1]+S[2])elif N==3:print(S[3]+max(S[1],S[2]))else: dp=[0]*(N+1) dp[1]=S[1] dp[2]=S[1]+S[2] dp[3]=S[3]+max(dp[1],S[2]) for i in range(4,N+1): dp[i]=S[i]+max(dp[i-2],dp[i-3]+S[i-1]) print(dp[-1]).. BOJ/🥈 2023. 1. 3.
★DP Intermediate I - 20 Solved★ ★ 17202 핸드폰 번호 궁합 ★ A=list(input())B=list(input())l=[]for i in range(8):l.extend((int(A[i]),int(B[i])))while len(l)>2: L=len(l) for j in range(L-1):l[j]=(l[j]+l[j+1])%10 del l[-1]print(*l,sep='')★ 16395 파스칼의 삼각형 ★  n,k=map(int,input().split())d=[0]*nd[0]=1if n==1:print(1)else: for i in range(1,n): new=[] new.append(1) for j in range(i-1): new.append(d[.. BOJ/🥈 2022. 12. 22.
★Sorting Upper-Intermediate I - 6 Solved★ ★ 1138 한 줄로 서기 ★ N = int(input())highers = list(map(int,input().split()))[::-1]orders = []for higher in highers: orders.insert(higher,N) N -= 1print(*orders) 👫🏿 자신보다 키 큰 사람이 앞에 몇 명 있는 지 정보에 따라 줄을 선 순서대로 출력하는 문제→ 먼저 키가 큰 사람부터 앞에 자신보다 키 큰 사람의 정보에 따라 줄을 선다면(입력한 반대순 정렬 - 여기서는 [::-1] 사용), 이 정보는 곧 앞에 서 있는 사람의 명수가 되고, 곧 줄 line의 index가 되어 python insert() 함수를 사용해 차례대로 줄을 설 수 있다.★ 2108 통계학 ★ 🍭 최빈.. BOJ/🥈 2022. 12. 20.
★Number Theory Intermediate I - 17 Solved★ ★ 9613 GCD 합 ★ import sys input=sys.stdin.readline from itertools import combinations def gcd(a,b): #a0: a,b=b%a,a return b for _ in range(int(input())): ans = 0 pairs = list(combinations(list(map(int, input().split()))[1:], 2)) for pair in pairs: ans += gcd(pair[0], pair[1]) print(ans) 🦙 최대공약수 GCD를 구하는 알고리즘은 크게 아래와 같이 3가지로 나눌 수 있다. ① math module 내장함수 사용 ② 유클리드 호제법 사용 (별도 gcd 함수 따로 만들기 / 재귀) ③ 정.. BOJ/🥈 2022. 12. 13.
★Stack & Queue & Deque Intermediate I - 20 Solved★ ★ 10828 스택 ★ import sys N = int(sys.stdin.readline()) stack = []*N kinds = ['push', 'pop', 'size', 'empty', 'top'] for _ in range(N): order = sys.stdin.readline().split() kind = order[0] if kind == kinds[0]: stack.append(order[1]) elif kind == kinds[1]: if len(stack) > 0: print(stack[-1]) stack.pop() else: print(-1) elif kind == kinds[2]: print(len(stack)) elif kind == kinds[3]: print(0) if len(.. BOJ/🥈 2022. 12. 11.
★Recursion Intermediate - 2 Solved★ ★ 17478 재귀함수가 뭔가요? ★ N = int(input())print('어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.')def CH(n): if n  🐤 대표적인 재귀 문제 → return 종료 조건 코드 + 함수 넣는 코드 2개 사이사이에 어떻게 코드 넣을 지 디자인만 잘하면 됨★ 4779 칸토어 집합 ★def draw(s,e): if (s+1)==e: return else: length=(e-s) step=(length//3) lines[s+step:s+step*2]=[' ']*(step) draw(s,s+step) draw(s+step*2,e)while 1: try: .. BOJ/🥈 2022. 12. 11.