일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인턴10
- GIS
- folium
- BFS
- seaborn
- ux·ui디자인
- 멋쟁이사자처럼
- likelionlikelion
- 멋사
- 알고리즘
- intern10
- GNN
- Plotly
- TiL
- Python
- DP
- parklab
- 그리디
- Join
- DFS
- pyhton
- 시각화
- 멋쟁이사자처럼멋쟁이사자처럼
- 프로젝트
- 마이온
- SQL
- 마이온컴퍼니
- likelion
- 멋재이사자처럼
- 파이썬
- Today
- Total
목록분류 전체보기 (105)
지금은마라톤중
접근법- 무한 반복문 활용- B의 맨 뒷자리에 1을 가졌는지 체크하여 연산- 2로 나누어 떨어지는지 체크하여 연산- 반복문 종료되면 횟수 출력- 2가지 연산 중 하나라도 작동하지 않으면 만들 수 없는 경우임 → -1 출력 a,b = map(int,input().split())cnt = 1while b != a : tmp = b if b % 10 == 1: b //= 10 elif b % 2 == 0: b //= 2 cnt +=1 if tmp == b: print(-1) breakelse : print(cnt)
접근법- 0과 1로 split했을 때 나오는 갯수로 파악- 11처럼 연속됐을 때 공백이 발생 → ""은 제거- 0으로 나눴을 때와 1로 나눴을 때의 비교하여 최소값 출력 s = input()cnt0 = s.split("1")cnt1 = s.split("0")cnt0 = [ k for k in cnt0 if k != ""]cnt1 = [ k for k in cnt1 if k != ""]print(min(len(cnt0), len(cnt1)))
1. 탐욕적(Greedy) 알고리즘이란?Greedy는 “탐욕스러운, 욕심 많은”이란 뜻을 가진 용어로, 바로 눈앞의 이익만 쫓는 알고리즘을 말합니다.최적화 문제를 대상으로 하며, 최적해를 찾을 수 있으면 그것을 목표로 삼고, 찾기 어려운 경우에는 주어진 시간 내에 그런대로 괜찮은 해를 찾는 것을 목표로 삼습니다. 2. 그리디 알고리즘의 2가지 조건탐욕 선택 속성탐욕 선택 속성이란 앞의 선택이 이후 선택에 영향을 주지 않는 것을 말합니다. 즉, 선택을 다시 고려하지 않습니다.최적 부분 구조최적 부분 구조란 문제의 최적 해결 방법이 부분 문제에 대한 최적 해결 방법으로 구성되는 경우를 말합니다. 3. 그리디 vs 다이나믹 프로그래밍(DP)두 알고리즘은 흔히 비교되는데, 서로 풀 수 있는 문제의 성격이 다..
이제 그리디 문제를 풀어볼까 합니다. 접근법- 최소시간을 구하는 문제- 조건에 맞게 분기- 공통 좌표값과 여분 좌표값 ex) (x,y) = (2,5) → 공통 좌표값 : 2 , 여분 좌표값 : 3- 비교1 : 대각선 이동 vs 한 블록 이동 *2 -> 공통 좌표값 이동 시 - 비교2: 대각선이동 vs 한 블록 이동 → 공통 좌표값 외 여분 좌표 이동 시 조건 비교비교1 1) 공통 좌표값까지 대각선 이동 후 여분 좌표값 한 블록 이동비교2 2-1) 공통 좌표값까지 대각선 이동 후 여분 좌표값만큼 대각선 이동 2-2) 공통 좌표값까지 대각선 이동 후 여분 좌표값-1만큼 대각선 이동 후 1만큼 한 블록 이동 3) 한 블록 이동만 사용 코드 : 조건문 활용x,y,w,s = map(int,input..
이 문제는 그리디 문제입니다.실버5 난이도여서 뚝딱하고 해결할줄 알았지만 예상외로 복잡한 코드로 풀었습니다. 접근법- 리스트 생성- 카약이 손상되었는데 여분 카약이 있는 팀을 우선적으로 제거- 그 후 반복문 통해 앞뒤 팀의 여분 카약 여부 체크하고 있을 시 여분 카약 리스트(rev_r_teams)에서 제거- 조건문에 걸리지 않으면 출발하지 못한 팀 cnt 증가 n,s,r = map(int,input().split())teams = [i for i in range(1,n+1)]s_teams = list(map(int,input().split()))r_teams = list(map(int,input().split()))cnt = 0rev_s_teams = list(set(s_teams)-set(r_teams..
실패한 접근법- matrix를 그리고 반복문을 통해 구현→ 시간초과로 실패import sysinput = sys.stdin.readlinen, m = map(int,input().split())matrix = [list(map(int,input().split())) for _ in range(n)]for _ in range(m): result = 0 x1,y1, x2,y2 = map(int, input().split()) for i in range(y1, y2+1): if x1 == x2 : result += matrix[i-1][x1-1] else: result += sum(matrix[i-1][x1-..
접근법- 메모리제이션 활용- (이전의 최대값 + 현재값)과 현재값 비교하며 최대값 결정 n = int(input())lst = list(map(int, input().split()))dp = [0] *(n+1)for i in range(1,n+1): dp[i] = max(dp[i-1]+ lst[i-1], lst[i-1])print(max(dp[1:]))
하루를 마무리하며 하나 풀어봅니다. 접근법- DP- 점화식 : dp[i] = dp[i-2] + dp[i-1] 실패 코드 - 입력값의 범위를 모두 충족하지 못했습니다. - n = 1일때 dp[2]에서 index out of range 에러 발생n = int(input())dp = [0 for _ in range(n+1)]dp[1], dp[2] = 1,2for i in range(3,n+1): dp[i] = dp[i-1] + dp[i-2]print(dp[n]%10007) 정답 코드n = int(input())dp = [0 for _ in range(n+1)]if n