일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 개발자
- dfs
- 삼성 청년 sw아카데미
- 삼성
- 디자인패턴
- 취뽀
- UML
- 코딩테스트
- 코테
- 백준 2003
- 싸피 13기
- 우테코
- 부트캠프
- 정처기
- 프리코스
- 삼성 부트캠프
- SSAFY
- 파이썬
- 백준
- 삼성 청년 SW 아카데미
- 삼성청년SW아카데미
- 우테코 7기
- 코딩
- 비전공자
- SWEA
- 마이스터고
- 정보처리기사
- 싸피
- 13기
- 우테코 프리코스
- Today
- Total
목록코딩테스트 (59)
룰루코딩

문제솔루션n, m = map(int, input().split())a = list(map(int, input().split()))cnt, sum = 0, 0start, end = 0, 0while True: if sum >= m: if sum == m: cnt += 1 sum -= a[start] start += 1 else: if end == n: break sum += a[end] end += 1print(cnt)깨달은 점 투포인터를 이용하여 부분의 합을 구해야한다.슬라이딩윈도우라고도 한다고한다.(배열 위에서 연속된 구간(서브배열)을 효율적으로 탐색·처리하기 위한 기법) whi..

문제솔루션n = int(input())cnt,sum = 0,0start, end = 0,0while end n: sum -= start start += 1 else: cnt+=1 end+=1 sum+=endprint(cnt)깨달은점오랜만에 푸려니 기억이 잘 안났다.. 투포인터를 사용해서 풀어야하는 문제였다. cnt,sum = 0,0start, end = 0,0cnt: 연속된 수의 합이 n이 되는 경우의 수를 세는 변수sum: 현재 구간에 해당하는 숫자들의 합 저장start와 end: 현재 연속된 수열의 시작과 끝 위치를 나타내는 두 포인터while end n: sum -= start start += 1 el..

문제솔루션import sysinput= sys.stdin.readlineN = int(input())li = []for i in range(N): start, end = map(int,input().split()) li.append((start, end))li.sort(key=lambda x : (x[1],x[0]))count = 1end = li[0][1]for i in range(1, N): if li[i][0]>=end: end = li[i][1] count += 1print(count)깨달은점어디서 많이 본거같다 했는데 전공시간에 본 예제였다.회의시간배정문제로 그리디를 이용해서 풀면 된다. for i in range(N): start, end = ma..

문제솔루션N = int(input())li = list(map(int, input().split()))new = sorted(list(set(li)))dic = {}for i in range(len(new)): dic[new[i]] = ifor i in li: print(dic[i], end=" ") 깨달은 점처음에는 문제가 이해가 안됐는데 입출력 예시를 생각해보면 이해를 하기 조금 수월해진다.여기서 압축값은 작은 값부터 몇 번째로 작은 값인지이다. 처음에는 리스트랑 셋만 이용해서 풀었더니 시간초과가 떴고 사전을 이용해서 시간복잡도를 줄여준다,. new = sorted(list(set(li)))1. 중복을 제거한 후 정렬한다. dic = {}for i in range(len(new)): dic[ne..

문제솔루션import sysinput = sys.stdin.readlinearr = [0 for i in range(101)]arr[1]=1arr[2]=1arr[3]=1for i in range(4,101): arr[i]=arr[i-3]+arr[i-2]t = int(input())for i in range(t): n = int(input()) print(arr[n])깨달은 점다이나믹 프로그래밍(dp) 문제로 점화식을 구해서 풀어야 했다.n번째 정삼각형의 변의 길이는 (n-2)번째 삼각형과 (n-3)번째 삼각형의 변의 길이의 합과 같아서 점화식을 구하면 f(n)=f(n−2)+f(n−3) (단,n=1,2,3일때f(n)=1) 이다.이를 이용해 dp의 메모제이션을 활용하면 된다.

문제솔루션import sysimport heapqinput = sys.stdin.readlineheap = []for _ in range(int(input())): n = int(input()) if n == 0: if len(heap): print(heapq.heappop(heap)) else: print(0) else: heapq.heappush(heap, n)깨달은점일반 리스트로 풀면 시간초과 뜨고 파이썬 힙 모듈을 이용하면 쉽게 풀 수 있는 문제이다.힙은 완전 이진 트리의 일종으로 힙은 우선순위 큐를 구현하는 데 유용한 자료구조.(우선순위 큐는 각 원소가 우선순위를 가지며, 우선순위가 높은 원소부터..

문제솔루션import sysinput=sys.stdin.readlineN = int(input())li=[]dic=dict()for _ in range(N): num=int(input()) li.append(num) if num in dic: dic[num]+=1 else: dic[num]=1print(round(sum(li)/N))print(sorted(li)[N//2])max_freq = 0maxf=[]for key,value in dic.items(): if value>max_freq: max_freq=value maxf=[key] elif value==max_freq: maxf.append(key)if ..

문제솔루션dict = {"000000": "A", "001111": "B", "010011": "C", "011100": "D", "100110": "E", "101001": "F", "110101": "G", "111010": "H"}N = int(input())text = input()result = ""for i in range(1, N + 1): word = text[6 * (i - 1):6 * i] found = False if word in dict: result += dict[word] found = True else: for num in dict.keys(): cnt = sum(1 for j in range..