일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹 프로그래밍
- 프로그래머스
- web
- 자료구조
- 정렬
- 그래프 탐색
- 그래프이론
- 그래프 이론
- 자바스크립트
- DP
- 웹 프론트엔드
- level2
- BFS
- DFS
- 백준
- 파이썬
- CSS
- 너비 우선 탐색
- 딕셔너리
- BASIC
- 브루트포스 알고리즘
- 스택
- programmers
- 프로그래머스스쿨
- lv2
- JavaScript
- 문자열
- 알고리즘
- 구현
- 그리디 알고리즘
- Today
- Total
목록알고리즘/백준 (26)
DevLog:-)

문제 코드 while(1): n = int(input()) while(n>9): n = sum(map(int,list(str(n)))) print(n) if n == 0: break 123 숫자→”123” 문자열 →[”1”,”2”,”3”] 리스트 → 1,2,3 숫자리스트→sum합 → n에 담김 ⇒반복합니다.👍

문제 문제 파악 가로 두 칸, 세로 N 칸인 우리에 사자를 배치하는 문제이다. 배치할 때 조건은 가로, 세로로 붙어 있게 배치할 수 없다는 것이다. N이 커질 수록 이전의 결괏값을 활용해서 풀 수 있는 문제이다. -> DP 규칙을 찾고 점화식을 찾아보자 예제 분석 N이 늘어날 수록 맨 밑에 칸이 추가된다고 생각하면 맨 밑에 칸에 사자를 어떻게 놓을 것이냐에 따라 개수를 찾고 규칙을 찾을 수 있다. 크게 두 가지(놓지 않는 경우, 놓는 경우)로 나눌 수 있다. N = 1 일때 : 놓지 않는 경우 (1) + 놓는 경우 (2) = 총 3 N = 2 일때 : 놓지 않는 경우 (3) + 놓는 경우 (2+2) = 총 7 N = 3 일때 : 놓지 않는 경우 (7) + 놓는 경우 (5+5) = 총 17 -놓지 않는 경..

문제 코드 import sys N = int(sys.stdin.readline()) dp =[0,-1,-1,1,-1,1]+[0 for i in range(N)] for i in range(6,N+1): dp[i] =-1 if(dp[i-3]!=-1 and dp[i-5]!=-1): dp[i] = min(dp[i-3]+1,dp[i-5]+1) elif(dp[i-3]!=-1): dp[i] = dp[i-3]+1 elif(dp[i-5]!=-1): dp[i] = dp[i-5]+1 print(dp[N]) 코멘트 Dp를 이용해서 풀었다. 제시된 무게를 3킬로그램과 5킬로그램 봉지로 나눌 때 봉지 수가 최소가 되도록 하는 문제이다. 제시된 무게까지 for문을 돌려서 dp리스트에 최소 개수를 계속 저장할 수 있도록 했다. 그..

문제 코드 n=int(input()) s=[int(input()) for _ in range(n)] dp=[0]*(n) # dp 리스트 if len(s)

문제 1. 초기 풀이 import sys N = int(sys.stdin.readline()) li = [list(map(int,sys.stdin.readline().strip().split())) for _ in range(N)] s =[0] for i in range(N-1,-1,-1): S = li[i][0] M = li[i][1] MAX = M if(i+S-1)>=N: li[i][1] = -1 continue for j in range(i+S,N): #해당 일자의 상담기간 이후 기간을 for문으로 돌면서 최대 금액을 찾는다. if(li[j][1] != -1 ): MAX = max(MAX, M + li[j][1]) li[i][1] = MAX #각 일자별 최대 금액으로 list를 갱신한다. s.app..

문제 코드 n = int(input()) books = {} for _ in range(n): book = input() if book not in books: books[book] = 1 else: books[book] += 1 M = max(books.values()) arr = [] for book, n in books.items(): if M==n: arr.append(book) arr.sort() print(arr[0]) 코멘트 딕셔너리를 사용해서 풀었다. key : 책 이름, value : 팔린 개수 max를 이용해서 가장 많이 팔린 수를 찾고 해당하는 책 이름을 배열로 저장한 후 오름차순 정렬 첫번째 책이름을 출력했다.

코드 n = int(input()) for i in range(n, 0, -1): print(' '*(n-i) + '*'*(2*i-1))

문제 1.BFS코드 import sys from collections import deque x = int(sys.stdin.readline().strip()) def fun(start_x): q= deque() q.append((0,start_x)) while(q): C, cur_x =q.popleft() if(cur_x==1): return C elif(cur_x!=0): if(cur_x % 3 == 0): q.append((C+1,cur_x//3)) if(cur_x % 2 == 0): q.append((C+1,cur_x//2)) q.append((C+1,cur_x-1)) print(fun(x)) #큐에 연산 횟수, 연산 결괏값을 넣어 와일문을 돌려서 1이 나올 때의 연산 횟수 반환했다. 2.DP코드..

문제 코드 import sys eng = 'abcdefghijklmnopqrstuvwxyz' num = [] s = sys.stdin.read() for i in eng: num.append(s.count(i)) m = max(num) for i in range(len(num)): if m == num[i]: print(chr(i+97), end = '') #chr(97) = 'a' # 아스키코드에 해당되는 문자로 변환 코멘트 문제 이해 가장 많이 나온 문자를 출략하면 되는 문제이다. 접근 방식 알파벳을 담은 문자열을 만들고 입력받은 문자열에 몇 개씩 들어있는지 순서대로 num 리스트에 append 한다. 가장 많은 숫자가 들어있는 num의 인덱스를 아스키토드를 이용해서 문자로 변환 후 출력한다. -sy..

문제 문제 이해 로봇청소기가 벽이 아닌 구간을 돌아다니며 청소를 하는 문제이다. 방의 크기/청소기 위치, 청소기 방향이 주어지고 벽은 1, 빈칸은 0으로 된 N*M 값을 받게 된다. 아래와 같이 로봇 움직임의 규칙이 나와있는데 이에 대한 이해와 숙지가 굉장히 중요한 거 같다. 현재 칸이 아직 청소되지 않은 경우, 현재 칸을 청소한다. 현재 칸의 주변 4$4$칸 중 청소되지 않은 빈 칸이 없는 경우, 바라보는 방향을 유지한 채로 한 칸 후진할 수 있다면 한 칸 후진하고 1번으로 돌아간다. 바라보는 방향의 뒤쪽 칸이 벽이라 후진할 수 없다면 작동을 멈춘다. 현재 칸의 주변 4$4$칸 중 청소되지 않은 빈 칸이 있는 경우, 반시계 방향으로 90∘$90^\circ$ 회전한다. 바라보는 방향을 기준으로 앞쪽 칸이..