def dfs(): if len(s) == M: print(' '.join(map(str,s))) return for i in range(1, N+1): if i in s: # 가지치기, 이미 선택한 숫자 배제 continue if len(s) > 0: #리스트 안에 존재할 때 if s[-1] > i: #맨 끝 원소가 i보다 작을 때는 넘겨버린다.(오름차순 만들기 위함) continue s.append(i) dfs() #함수호출 s.pop() # 출력 후 return하고 마지막 원소 비우기 N, M = map(int, input().split()) s = [] dfs()
입력 값이 3 5 7 12 라면 무게가 가장 많이 나가는 값은 해당하는 하나의 로프에만 가능하고 가장 작은 무게를 가진 로프는 모든 로프의 개수에 가능 하기 때문에 내림차순 정렬을 해서 인덱스 간의 곱으로 풀이를 했다. 따라서 먼저 sort()함수를 사용하여 오름차순 정렬을 한 다음에 reverse()함수를 사용하여 내림차순으로 정렬을 했다. 그러면 rope = [12, 7, 5]가 되는데, 리스트 인덱스는 0부터 시작하기 때문에 인덱스+1를 해준 값을 각 원소마다 곱해주었다. 이 곱해준 값들을 다 저장해 놓고 최대값을 뽑으면 된다. N = int(input()) rope = [] for i in range(N): rope.append(int(input())) rope.sort() rope.reverse..
1. 일단 모든 조합의 합을 구해서 B보다 같거나 큰것이 있다면 리스트에 넣어준다. 2. 리스트에서 가장 작은 값을 추출하여 B에서 뺀다. from itertools import combinations T = int(input()) #높이가 B 이상인 탑 중에서 높이가 가장 낮은 탑 #조합을 구하여 합이 B보다 큰것의 리스트를 만든다. for tc in range(1,T+1): N, B = map(int,input().split()) # N:점원 수 B:선반의 높이 H = list(map(int,input().split())) over = [] sum_o = [] for i in range(N+1): over.append(list(combinations(H,i))) for j in range(len(ov..
1.거꾸로 봐서 현재보다 큰 것이 있다면 M 갱신. 2. 큰 것이 없다면 M에서 빼준 값을 누적 합을 구해주기 *****이 문제는 SWEA에 있는 1859번 백만장자 프로젝트 문제와 같은 문제이다***** T = int(input()) for tc in range(T): N = int(input()) lst = list(map(int, input().split())) lst.reverse() #거꾸로 보기 M = lst[0] ans = 0 for i in range(len(lst)): if M >= lst[i]: ans += M - lst[i] else: M = lst[i] # 큰게 있다면 최고가 갱신 print(ans) 런타임에러 난 코드(인덱스 에러) ##########런타임에러######### T ..
1. 일단 어느 곳에서 시작이 가능하기 때문에 이중for문을 사용하여 모든 원소에서 시작하게 했다.(함수) 2.함수에서 4방 탐색을 한다. 글자수는 7자이기 때문에 cnt가 8번이 되면 종료하는 것으로 짰다. 3.중복을 없애기 위해서 set()으로 받았다. def move(x,y,cnt): global num if cnt == 8: #8번 돌아가면 종료 num.add("".join(temp)) # join에서 str로 받아달라해서 MAP원소들을 int형에서 str로 바꿈 return #우 if y+1 < 4: temp[cnt-1] = MAP[x][y+1] move(x,y+1,cnt+1) #하 if x+1 < 4: temp[cnt-1] = MAP[x+1][y] move(x+1,y,cnt+1) #상 if x..
T = int(input()) for tc in range(1,T+1): two = input() three = input() n_two = [] for i in range(len(two)): if two[i] == '1': temp = '0' else: temp = '1' n_two.append(int(two[:i] + temp + two[i+1:], 2)) # print(n_two) for i in range(len(three)): for k in range(3): if three[i] != str(k): temp = str(k) n_three = int(three[:i] + temp + three[i + 1:], 3) if n_three in n_two: ans = n_three print("#{}..
이 문제는 이전에 풀었던 swea에 5202번 화물 도크 문제와 거의 똑같다. 그리디 알고리즘인데, 다른 점이라고는 조건이 하나 더 붙었다는 점이다. 시작시간과 끝나는 시간이 같아도 카운트를 해줘야한다. 그래서 끝나는 시간을 기준으로 오름차순 정렬을 하고 시작 시간을 기준으로 오름차순 정렬을 해준다. N = int(input()) room = [list(map(int, input().split()))for _ in range(N)] # 끝나는 시간 먼저 오름차순 정렬하고 시작시간을 기준으로 오름차순정렬 room.sort(key=lambda x : (x[1],x[0])) print(room) cnt = 1 end = room[0][1] #맨 처음꺼 뽑음 for i in range(1,N): # 다음 시작이..
많이 배정하거나 선택하는 문제를 '활동 선택 문제(Activity Selection problem)'라고 한다. 이 문제가 그리디 알고리즘(탐욕알고리즘)의 전형적인 문제라고 한다. 수식으로 그려봤을 때 겹치는 것들을 선택하면 안되는 문제이기 때문에 1. 종료되는 시간을 기준으로 정렬을 했다. sort()함수의 인자 안에 람다를 써주고 기준을 넣어주면 된다.( 리스트의 1번째가 종료시간이므로 x[1]이라고 해줬다.) 2. 다음 순서의 시작이 앞에 것의 종료시간 안에 있다면 그것을 제외시킨다.(pop(0)으로 표현) 3. 겹치지 않는다면 cnt ++해주고 end를 갱신시켜준다. #cnt =1로 초기화한 이유는 제일 빨리 끝나는 것을 선택하고 시작하기 때문 T = int(input()) for tc in ra..
- Total
- Today
- Yesterday
- 위클리챌린지2주차
- SSAFY
- AWS
- vue.js
- splide
- 백준
- 자바
- commit되돌리기
- 알고리즘
- git
- SQL
- vue
- 세션 스토리지
- Java
- 프로그래머스
- SWEA
- javascript
- 파이썬
- SSAFY퇴소
- DOM
- 안드로이드스튜디오
- 트리
- 배포
- django
- 독학
- Pyhton
- 비동기패턴
- Python
- N과M
- 싸피
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |