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..
T = int(input()) for tc in range(1,T+1): N, M = map(int, input().split()) weight = list(map(int,input().split())) truck = list(map(int,input().split())) ans = 0 for i in range(M): temp = [] for j in range(N): if truck[i] >= weight[j]: # 무게가 트럭 용량보다 작거나 같으면 temp.append(weight[j]) #temp에 넣어줌 if len(temp) != 0: #temp에 한개라도 들어갔을 때 ans += max(temp) # temp에 들어있는 최대값을 ans에 더해줌 for j in range(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)
T = int(input()) for tc in range(1, T+1): N, M = map(int, input().split()) b = format(M, 'b') # 2진수로 변환 ans = list(map(int, list(b))) ans.reverse() print("#{}".format(tc), end=' ') if len(ans) >= N: cnt = 0 for k in range(N): cnt += ans[k] if cnt == N: print('ON') else: print('OFF') else: print('OFF')
- Total
- Today
- Yesterday
- 독학
- SSAFY
- DOM
- Python
- 자바
- 트리
- 알고리즘
- 세션 스토리지
- 백준
- 싸피
- SWEA
- 안드로이드스튜디오
- AWS
- javascript
- splide
- git
- Java
- 비동기패턴
- django
- vue.js
- vue
- SQL
- commit되돌리기
- SSAFY퇴소
- N과M
- 배포
- 프로그래머스
- 파이썬
- Pyhton
- 위클리챌린지2주차
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |