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

문제솔루션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의 메모제이션을 활용하면 된다.
1212 8진수 2진수https://www.acmicpc.net/problem/1212print(bin(int(input(),8))[2:])int(input(),8)는 8 진수로 입력을 받고, bin()을 이용해 2진수로 변환하여 출력한 다음, [2:]를 이용해 맨 앞 2자리에 이진법을 의미하는 0b를 제거해 2번째 자리부터 출력될 수 있도록한다.1373 2진수 8진수https://www.acmicpc.net/problem/1373print(oct(int(input(), 2))[2:])oct()를 이용해 정수를 0o로 시작하는 8진수 문자열로 변환, oct(n)을 출력하면 앞에 0o 문자가 붙어서 2번째 인덱스부터 출력해주면 된다.1252 이진수 덧셈https://www.acmicpc.net/proble..

문제솔루션import sysinput = sys.stdin.readlineT = int(input())for _ in range(T): N = int(input()) dp = [0] * (N+1) for i in range(1,N+1): if i ==1: dp[i] =1 elif i ==2: dp[i] =2 elif i ==3: dp[i]=4 else: dp[i] = dp[i-1]+dp[i-2]+dp[i-3] print(dp[N])깨달은 점이 문제는 다이나믹 프로그래밍을 이용해 풀어야하는 문제이다.for i in range(1, N+1): if..

문제솔루션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)깨달은점일반 리스트로 풀면 시간초과 뜨고 파이썬 힙 모듈을 이용하면 쉽게 풀 수 있는 문제이다.힙은 완전 이진 트리의 일종으로 힙은 우선순위 큐를 구현하는 데 유용한 자료구조.(우선순위 큐는 각 원소가 우선순위를 가지며, 우선순위가 높은 원소부터..