본문 바로가기

알고리즘/백준 (Pyhthon)

(79)
[알고리즘] 백준 16637 괄호 추가하기 / python www.acmicpc.net/problem/16637 16637번: 괄호 추가하기 첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 www.acmicpc.net #스택에 숫자와 연산자를 넣어서 계산 def cal2(lst): op, num = [], [] for i in lst[::-1]: if i == '+' or i == '-' or i == '*': op.append(i) else: num.append(int(i)) while len(num) > 1: n1 = num.pop() n2 = num.pop() oper = op.pop() if oper ..
[알고리즘] 백준 9019 DSLR / python, bfs www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 � www.acmicpc.net from collections import deque def bfs(): q = deque() q.append([A, '']) visited[A] = 1 while q: x, y = q.popleft() if x == B: print(y) D = x*2 % 10000 if not visited[D]: visited[D] = 1 q.append([D, y + 'D']) S = x - 1 if x ..
[알고리즘] 백준 14891 톱니바퀴 / python www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net def rotate(t_num, t_dir): T[t_num] = T[t_num][t_dir*-1:] + T[t_num][:t_dir*-1] def left(t_num, t_dir): if t_num == -1 or T[t_num][2] == T[t_num+1][6] : return left(t_num-1, t_dir*-1) rotate(t_num, t_dir) def right(t_num, t_dir): ..
[알고리즘] 백준 13913 숨바꼭질4 / python https://www.acmicpc.net/problem/13913 13913번: 숨바꼭질 4 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 �� www.acmicpc.net ✔ 풀이과정 bfs로 탐색을 할거니까 자식노드를 차례로 모두 방문한다. 방문하면서 K값인지 아닌지 확인한다. dist는 노드까지 가는데 몇초걸리는가?를 의미한다. 예를들어 5의 자식노드인 4, 6, 10의 dist는 1이므로 4, 6, 10까지 걸리는 최소 시간은 1인것이다. dist 배열 👉 dist[현재 노드] = 걸리는 시간(초) move 배열 👉 mo..
[알고리즘] 백준 1644 소수의 연속합 / pyhton https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 www.acmicpc.net 검색해서 에라토스테네스의 체 코드를 이용해 N이하의 소수배열을 구하고(여기를 참고) 2003번문제와 동일한 방법으로 연속된 합을 구했다. def isPrime(n): a = [False,False] + [True]*(n-1) for i in range(2,n+1): if a[i]: primes.append(i) for j ..
[알고리즘] 백준 1806 부분합 / python https://www.acmicpc.net/problem/1806 1806번: 부분합 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. www.acmicpc.net N, S = map(int, input().split()) A = list(map(int, input().split())) left, right, hap, result, temp = 0, 0, A[0], 0, 0 while left = S: temp = right - left + 1 if result == 0: result = temp else: result = min(result, temp) ..
[알고리즘] 백준 2003 수들의 합 2 / python https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net left, right를 설정해놓고 진행해나가는데 right는 left와 같거나 커야한다. left가 증가할 경우의 예외처리를 처음에 못했는데 left가 right보다 커지면 right를 left와 같게 해줘서 그 인덱스부터 시작할 수 있도록 해준다. (처음 시작하는 것 처럼) N, M = map(int, input().split()) A = list(map(int, in..
[알고리즘] 백준 2580 스도쿠 / pyhton, 백트랙킹 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net ✔ 풀이과정 스도쿠 규칙은 같은 행, 같은 열, 같은 3x3사각형 내에 1~9사이의 숫자가 겹치지 않게 배치하는 것이다. 이걸 시간초과가 나지 않게 확인하기 위해서 c1, c2, c3의 이차원 배열을 만들어서 0~8행열사각형에 1~9숫자가 존재하는지 직관적으로 체크해놓고 스도쿠 전체를 돌면서 규칙에 맞는지 확인한다. 스도쿠 이차원 배열을 돌때는 좌표값이 아닌 0, 1, 2, ...80 까지의 순서..