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.거꾸로 봐서 현재보다 큰 것이 있다면 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 ..
이 문제는 이전에 풀었던 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): # 다음 시작이..
1. 마지막 주유소는 사용을 안함( 그 주유소까지 도착하면 되기 때문) 따라서 반복문을 하나 전까지만 돌렸다. 2. 먼저 최소값을 0번째 인덱스가 있는 것으로 세팅을 해준다. 2.1 결과값에 곱한 값을 더해주고 다음 반복문으로 넘어감 3. 최소값이 다음 money리스트 안의 값보다 크면 3.1 최소값 업데이트 3.2 결과값에 곱한 값을 더해주고 다음 반복문으로 넘어감 4. 최소값이 다음 money리스트 안의 값보다 크지 않다면 4.1 그냥 결과값에 곱한 값을 더해준다. N = int(input()) # 도시의 개수 dis = list(map(int,input().split())) money = list(map(int,input().split())) result = 0 for i in range(0, le..
연속한 수의 합이 M이 되어야 하므로 이중 for문을 만들어서 뒤쪽 for은 앞 for문의 바로 뒤 인덱스부터 탐색하게 한다. 더한 값이 M이면 카운트해주고 for문을 나간다. 더한 값이 M보다 크면 그냥 for문을 나간다. N, M = map(int, input().split()) lst =list(map(int, input().split())) cnt = 0 for i in range(N): num_sum = lst[i] if num_sum == M: cnt += 1 continue for j in range(i+1, N): num_sum += lst[j] if num_sum == M: cnt += 1 break elif num_sum > M: break print(cnt)
사실 구글링 했다! 답이 n-1이길래 생각해본 결과 그림을 그려보니까 첫번째 케이스일 때 이러한 그래프가 나온다. 세 원을 다 탐색 하려면 무조건 2개 선분을 지나야한다. 두번 째 케이스 제일 아래쪽 1번부터 5번까지 돌아야하는데 그러면 그려진 선분을 다 지나야한다. 그러면 꼭지점은 5개인데 그 사이에 존재하는 선분은 1개가 더 적을 것이다. (두 점이 있어야 한 선을 만드는 것의 원리) 그래서 답은 모든 나라 N개 - 1 T = int(input()) for tc in range(T): N, M = map(int, input().split()) for i in range(M): a, b = map(int, input().split()) print(N-1)
1. 듣지 못한 명단을 리스트로 받고 2. 보지 못한 명단도 리스트로 받는다 3. 두가지 리스트를 set으로 집합으로 만들어준다음 교집합을(&) 구한 뒤에 다시 list로 만들어준다. 4. 듣도보도 못한 리스트를 사전순으로 sort해주고 출력 처음에 그냥 리스트 in을 사용해서 처리해줬는데 시간초과가 떴다. 리스트를 다 보아야해서 시간이 오래걸리는 것 같다. :( N, M =map(int,input().split()) no_hear = [] no_see = [] no_list = [] for i in range(N): a = input() no_hear.append(a) for i in range(M): b = input() no_see.append(b) #### in으로 했더니 시간초과!!!!!!!!!..
- Total
- Today
- Yesterday
- AWS
- vue
- vue.js
- 싸피
- 독학
- 프로그래머스
- git
- DOM
- Pyhton
- 트리
- SQL
- django
- javascript
- Java
- N과M
- 백준
- 파이썬
- SSAFY
- 위클리챌린지2주차
- splide
- Python
- 세션 스토리지
- 비동기패턴
- 자바
- 안드로이드스튜디오
- commit되돌리기
- 알고리즘
- SWEA
- 배포
- SSAFY퇴소
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |