본문 바로가기

Programming [Python]

(411)
#138 백준 파이썬 [10808] 알파벳 개수 https://www.acmicpc.net/problem/10808 #Solution word = list(str(input())) alphabet = [[alpha, 0] for alpha in 'abcdefghijklmnopqrstuvwxyz'] for alpha in alphabet: for character in word: if alpha[0] == character: alpha[1] += 1 for alpha in alphabet: print(alpha[1], end = ' ')
#137 백준 파이썬 [1676] 팩토리얼 0의 개수 https://www.acmicpc.net/problem/1676 #Solution N = int(input()) answer = 0 answer += N // 125 answer += N // 25 answer += N // 5 print(answer)
#136 백준 파이썬 [11722] 가장 긴 감소하는 부분 수열 - LIS https://www.acmicpc.net/problem/11722 #Solution https://claude-u.tistory.com/184 참조. 코드 한 글자 바꿨다. A = int(input()) A_list = list(map(int, input().split())) result = [[] for _ in range(A)] for i in range(A): if i == 0: result[i].append(A_list[i]) else: for j in range(0, i): if result[j][-1] > A_list[i]: if len(result[i]) - 1 < len(result[j]): result[i] = result[j] + [A_list[i]] if not result[i]: ..
#135 백준 파이썬 [11053] 가장 긴 증가하는 부분 수열 - LIS https://www.acmicpc.net/problem/11053 #Solution 다음과 같은 알고리즘을 따른다. 1) i 번째는 0부터 i-1 까지 수열(j)을 검사하면서 넘어간다. 2) 이전 수열들 중 마지막 숫자가 나보다 작은지 비교한다. (조건 1) 2-1) 작다면 해당 수열을 추가해주고 나 자신을 추가한다. 3) j for문을 돌리던 중 2)에 해당하지만, 수열의 길이가 더 길 경우 result[i]를 갱신해준다. 4) 반복한다. 5) 적절한 result[i]를 찾지 못했을 경우, 자신이 최소값이므로 자기 자신을 추가해준다. 6) result안 수열들 중 길이가 가장 max인 것의 길이를 출력한다. A = int(input()) A_list = list(map(int, input().spli..
#134 백준 파이썬 [11653] 소인수 분해 https://www.acmicpc.net/problem/11653 #Solution number = int(input()) result = [] while number != 1: for i in range(2, number + 1): if number % i == 0: result.append(i) number = number // i break for i in result: print(i)
#133 백준 파이썬 [1002] 터렛 https://www.acmicpc.net/problem/1002 #Solution 단순 수학 문제이다. 예외를 걸러주는 것이 중요하다. 0) 같은 점일때: -1 혹은 0 1) distance(점 사이의 거리) 가 반지름 더한 값 보다 작을 때: 0 2) 한 원이 다른 원을 포함하도록 클 때: 0 3) 외접하거나 내접할 때: 1 4) 그 외: 2 test = int(input()) for _ in range(test): x1, y1, r1, x2, y2, r2 = map(int, input().split()) distance = (((x1 - x2) ** 2) + ((y1 - y2) ** 2)) ** 0.5 if x1 == x2 and y1 == y2: if r1 == r2: print(-1) else:..
#132 백준 파이썬 [11659] 구간 합 구하기 4 https://www.acmicpc.net/problem/11659 #Solution 다이나믹 프로그래밍... 까지 가지 않고 미리 1~n까지의 sum을 구한다음 sum(j) - sum(i-1)을 구해주면 답이된다. import sys N, M = map(int, input().split()) numbers = list(map(int, sys.stdin.readline().split())) sum_numbers = [0 for _ in range(N)] for i in range(N): if i == 0: sum_numbers[i] = numbers[i] else: sum_numbers[i] = sum_numbers[i-1] + numbers[i] for _ in range(M): i, j = map(i..
#131 백준 알고리즘 [1260] DFS와 BFS - 그래프 https://www.acmicpc.net/problem/1260 #Solution http://ejklike.github.io/2018/01/05/bfs-and-dfs.html 참조하였음. 그래프 중 DFS(깊이 탐색) 그래프는 스택으로, BFS(넓이 탐색) 그래프는 큐로 구현할 수 있다. 조건이 몇가지 필요한데, 1) 연결 그래프다. 떨어진 그래프는 존재하지 않는다. 2) 정점이 여러 개 일 경우엔 작은 수부터 출력한다. 따라서 stack 이나 queue에 담을 때는 순/역순 정렬로 바꾼 뒤에 추가해준다. 3) 중복되는 수를 거르고 교집합을 쉽게 구하기 위해서 graph는 set을 사용한다. 인접행렬로 이 문제를 푼 사람도 있지만 나는 직관적으로 각각의 노드를 담고, 노드와 연결된 것들을 큐나 스택에..