일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- CleanCode
- 정렬
- 구현
- 클린코드
- java
- 순환
- 프로그래머스
- Color
- android
- inflearn
- 해슁
- SQL
- Spring
- DP
- front-end
- 자바
- 코딩테스트
- DFS
- 검색트리
- codecademy
- Kotlin
- javascript
- algorithm
- html
- 다이나믹 프로그래밍
- BFS
- 알고리즘
- SWEA
- CSS
- Today
- Total
목록Algorithm/BAEKJOON (47)
깡뇽

브루트 포스 유형의 Bronze 문제를 하나 더 풀어보았다. 2231번 분해합 풀이 [시도1] 맞았습니다!! n = int(input()) for i in range(n): num = i sum = 0 for j in range(len(str(i))): sum += int(str(num)[j]) if (i + sum) == n: result = i break print(result) 입력값 n의 생성자를 구해야 하는데 예를 들어, 245의 분해합은 256(=245+2+4+5)이므로 256의 생성자가 된다. 가장 작은 생성자를 찾거나 생성자가 없으면 0을 출력하면 되기 때문에 0부터 n까지 모든 숫자들이 n의 생성자인지 찾도록 한다. for문을 0부터 n까지 돌리는데 값이 i일 때에 i의 각 자리에 있는 ..

브루트포스 Bruteforcing 알고리즘 유형의 문제라고 한다. 무차별적으로 대입하는 그냥 다 확인해보는 그런 유형이라고 할 수 있다. (완전탐색) Bronze 2 레벨에 속하는 문제인데 이 문제는 꼭 풀이를 보지 않고 풀겠노라 다짐하면서 시작한다. 2798번 블랙잭 풀이 [시도1] 맞았습니다!! n, m = map(int, input().split()) numbers = list(map(int, input().split())) big = 0 for i in range(0, n): for j in range(i+1, n): for k in range(j+1, n): sum = numbers[i] + numbers[j] + numbers[k] if sum > big and sum

깊이 우선 탐색 DFS 유형의 문제를 선택했다. DFS 개념은 방향 없는 그래프를 기본으로 하여 설명되곤 하는데 본 개념을 그대로 문제로 나타낸 것이다. 정점 N개와 간선 M개가 주어지고 M개의 줄에 간선 양 끝점인 u와 v가 주어지는데 이때 연결되는 요소의 개수를 구해야 한다. 11724번 연결 요소의 개수 풀이 [시도1] 맞았습니다!! with 솔루션 n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] cnt = 0 # graph 채우기 for _ in range(m): u, v = map(int, input().split()) # 방향이 없으므로 두 개 모두 추가 graph[u].append(v) graph[v].append(u) #..

DP 유형의 문제를 풀어보자. 라고 다짐하고 문제 봤는데 이게 뭐지...? 했다...ㅎ DP 유형이면 당연히 점화식을 만들줄 알아야 하는데.. 앞으로 꼭 차근차근 맨 처음 경우부터 일단 계산해봐야지!!! 테스트 케이스 개수 만큼의 입력받은 수를 1, 2, 3의 덧셈으로 표현할 때의 표현 가능한 경우의 수를 구하면 된다. 1, 2, 3일 때에는 규칙성이 보이지 않지만 4일 때부터는 규칙을 찾을 수 있다. 1과 2와 3일 때에 경우에 각각 1, 2, 3을 활용하여 다시 경우가 구해지기 때문이다. 9095번 1, 2, 3 더하기 풀이 #솔루션 T = int(input()) def dp(i): if i == 1: return 1 elif i == 2: return 2 elif i == 3: return 4 el..

DFS 유형의 다른 문제 도전!! 배추밭 안에 배추의 좌표값이 주어지고 해당 좌표와 상하좌우로 연결된 좌표에도 배추가 있으면 하나의 구역으로 취급한다. 한 구역마다 배추흰지렁이 1마리가 사는데 배추밭에 있는 총 지렁이의 마리 수를 출력하자. 1012번 유기농 배추 풀이 [시도1] 맞았습니다!! with 솔루션 T = int(input()) #케이스 개수 #케이스 개수 만큼 코드 작동 while T > 0: N, M, K = map(int, input().split()) #각각 세로, 가로, 좌표 개수 field = [[0]*N for i in range(M)] #배추밭 #배추밭 배추 좌표 입력받기 for _ in range(K): x, y = map(int, input().split()) field[y]..

DFS와 관련된 문제를 풀고자 해당 유형의 문제들 중에서 그나마 난이도가 낮은 녀석을 골라보았다. 네트워크가 연결된 컴퓨터들은 함께 바이러스에 걸리게 된다. 첫째 줄 : 컴퓨터의 수 둘째 줄 : 네트워크 상 직접 연결된 컴퓨터 쌍의 수 N 줄 : 네트워크 상 직접 연결된 컴퓨터 번호 쌍 이러한 입력이 있을 때, 1번 컴퓨터의 감염으로 인해 바이러스에 걸리게 되는 컴퓨터의 수를 구하자. 2606번 바이러스 풀이 [시도1] 맞았습니다!! with 솔루션 n = int(input()) l = int(input()) graph = [[] for _ in range(n+1)] for _ in range(l): a, b = map(int, input().split()) graph[a].append(b) graph[..

DP 유형에 속하는 여러 문제들을 풀어보고자 해당 문제를 골랐다. N개의 집을 각각 빨강, 초록, 파랑 색으로 칠하는 비용이 각각 입력된다. 그런데 i번째 집은 i-1과 i+1번째에 해당하는 집들은 같은 색을 선택할 수 없다. 즉, 연속하는 2개의 집은 같은 색일 수 없다는 것이다. 1149번 RGB거리 풀이 [시도1] 맞았습니다!! with 솔루션 N = int(input()) color = [] for _ in range(N): rgb = list(map(int, input().split())) color.append(rgb) for i in range(1,N): color[i][0] = min(color[i-1][1], color[i-1][2]) + color[i][0] color[i][1] = m..

DP 유형에 속하는 여러 문제들을 풀어보고자 해당 문제를 골랐다. 필요하다고 생각하는 N개의 물건에는 각각 무게 W와 가치 V가 있고, 최대 K만큼의 무게까지만 배낭에 담을 수 있다. 최대한 즐거운 여행을 할 수 있도록 물건들의 가치의 최댓값을 찾아야 한다. 12865번 평범한 배낭 풀이 [시도1] 맞았습니다!! with 솔루션 N, K = map(int, input().split()) W = [0] V = [0] dp = [[0]*(K+1) for _ in range(N+1)] for _ in range(1, N+1): w, v = map(int, input().split()) W.append(w) V.append(v) for i in range(1, N+1): for j in range(1, K+1)..

다이나믹 프로그래밍 유형의 문제 중에서 선택했다. 1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다. 3. 마지막 도착 계단은 반드시 밟아야 한다. 각 계단에 쓰여 있는 점수의 최대합을 구하자. 2579번 계단 오르기 [시도1] 맞았습니다!! with 솔루션 n = int(input()) score = [0] #계단 점수 저장 dp = [0] #각 층까지의 최대 점수 저장 for i in range(n): score.append(int(input())) if n == 1: dp.append(score[1]) elif ..

문제의 제목처럼 "개" 그림을 출력하면 된다. 엄청 단순한 문제이지만 문자열에서 주의해서 사용해야할 기호들에 대해 다시 정리하고자 이 글을 쓴다. 10172번 개 풀이 [시도3] 맞았습니다!! print("|\_/|") print("|q p| /}") print("( 0 )\"\"\"\\") print('|\"^\"` |') print('||_/=\\\\__|') 주의해야할 점은 큰따옴표(")와 작은따옴표(') 그리고 백슬래시(\)는 입력한대로 출력되지 않을 수 있다. 예를 들어, 문자열 앞, 뒤에는 큰따옴표와 작은따옴표를 사용하는데 큰따옴표를 사용해서 여닫은 문장 안에 큰따옴표를 사용하고 싶다면 오류가 발생할 수 있다. 점프 투 파이썬에도 잘 정리되어 있는 부분이다. - \\ : 문자 백슬래시(\)를 ..
입력받은 수를 3과 5를 사용하여 최소한의 조합으로 만들어야 한다. 만들 수 없을 때에는 -1을 출력한다. 2839번 설탕 배달 풀이 #솔루션 total = int(input()) cnt = 0 while total >= 0: if total % 5 == 0: cnt += total // 5 print(cnt) break total -= 3 cnt += 1 else: print(-1) 5kg 봉지를 많이 사용해야 봉지의 개수를 최소화할 수 있다. 그러므로 전체를 5로 나눠서 나눠지면 5kg 봉지로만 설탕을 배달할 수 있다. 즉, cnt 봉지의 개수는 전체 설탕 무게를 5kg으로 나누어 얻는 몫이 된다. 그러나 5로 나눠지지 않는 경우에는 3kg 봉지를 사용해 볼 수 있음으로 3으로 뺄셈을 해준 뒤에 다시..

(앨범에 수록된 곡에 포함되어 있는 저작권이 있는 멜로디의 개수) / (앨범에 수록된 곡의 개수) = 앨범에 포함되어있는 저작권이 있는 멜로디의 평균값 평균값은 반올림을 해서 정수로 표현 입력 : 앨범에 수록된 곡의 개수 & 앨범에 포함되어있는 저작권이 있는 멜로디의 평균값 출력 : 앨범에 수록된 곡에 포함되어 있는 저작권이 있는 멜로디의 개수 2914번 저작권 풀이 [시도1] 맞았습니다!! a, i = map(int, input().split()) b = (a * (i-1)) + 1 print(b)