알고리즘

    [Python/파이썬 15665 백준] N과 M(11)

    www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7) 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수..

    [Python/파이썬 15652 백준] N과 M(4)

    www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 itertools 쓴거 엄청 쉽네용 import sys from itertools import combinations_with_replacement input=sys.stdin.readline n,m=map(int,input().split()) lst=[i for i in range(1,n+1)] lst=list(combinations_with_replacement(lst,m)) for i in lst:..

    [Python/파이썬 백준 1759] 암호 만들기

    www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 풀이 문제 조건이 자음 최소 2개, 모음 최소 1개가 꼭 있어야하구 사전식으로 정렬 출력입니다. 시간 제한 2초라 널널했습니다. 일단 자음 모음 리스트로 나눠주고 그 다음 조합으로 했습니다. 주석 참고하세용! # 암호 만들기 # 리스트 -> 문자열 만드는게 쫌 빡셌음 import sys from itertools import combinations input=sys.stdin.readline l,c=map(int,i..

    [Python/파이썬 10819 백준] 차이를 최대로

    www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 풀이 조합 permutation 써서 브루트 포스 알고리즘으로 전부 다 계산해줬습니다. # 차이를 최대로 import sys from itertools import permutations input=sys.stdin.readline n=int(input()) a=list(map(int,input().split())) a_lst=list(permutations(a,n)) max_size=-sys.maxsize for i in ..

    [Python/파이썬 6588 백준] 골드바흐의 추측

    www.acmicpc.net/problem/6588 6588번: 골드바흐의 추측 각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰 www.acmicpc.net 문제 짝수 n n= a+b 식에서 a 와 b 둘다 소수인 경우를 출력하라 입니다. 출력 못하는 상황이 나오면 Goldbach's conjecture is wrong. 출력하고 0누르면 exit 입력 입력은 하나 또는 그 이상의 테스트 케이스로 이루어져 있다. 테스트 케이스의 개수는 100,000개를 넘지 않는다. 각 테스트 케이스는 짝수 정수 n 하나로 이루어져 있다. (6 ≤ n ≤ 1..

    [Python/파이썬 15684 백준] 사다리 조작

    www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net check 함수는 세로선이 자기 위치 맞게 가면 True 아니면 False bf 함수는 재귀로 다리를 3개까지만 이어주면서 true값 비교 주석 참고하세용 import sys input=sys.stdin.readline n,m,h=map(int,input().split()) if m==0: print(0) sys.exit() bridge=[[False]*n for _ in range(h)] for _ in r..

    [Python/파이썬 14891 백준] 톱니바퀴

    www.acmicpc.net/problem/14891 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 풀이 구현 문제입니다 케이스가 별로 없어서 노가다로 했습니다. 주석 보면서 이해하세용 #구현 # 시물레이션 from collections import deque import sys input=sys.stdin.readline first=deque(map(int,input().strip())) second=deque(map(int,input().strip())) third=deque(map(int,input..

    [Python/파이썬 14890 백준] 경사로

    [Python/파이썬 14890 백준] 경사로

    www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 경사로 성공분류 시간 제한메모리 제한제출정답맞은 사람정답 비율 2 초 512 MB 15148 7937 5646 54.075% 문제 크기가 N×N인 지도가 있다. 지도의 각 칸에는 그 곳의 높이가 적혀져 있다. 오늘은 이 지도에서 지나갈 수 있는 길이 몇 개 있는지 알아보려고 한다. 길이란 한 행 또는 한 열 전부를 나타내며, 한쪽 끝에서 다른쪽 끝까지 지나가는 것이다. 다음과 같은 N=6인 경우 지도를 살펴보자. 이때, 길은 총 2N..

    [Python/파이썬 14888 백준] 연산자 끼워넣기

    www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 연산자 끼워넣기 성공분류 시간 제한메모리 제한제출정답맞은 사람정답 비율 2 초 512 MB 37865 20102 12547 49.654% 문제 N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다..

    [알고리즘] 다이나믹 프로그래밍 (DP) 이해하기

    다이나믹 프로그래밍(동적계획법)이란? - 큰 문제를 풀기 위해서 작은 문제를 풀어 나가는 방식이며, 작은 문제에서 반복이 없다는 것이 특징입니다. -> 분할 정복 기법과 다른 결정적인 차이 또한 하나의 문제를 단 한 번만 푸는 알고리즘 다이나믹 프로그래밍 조건 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은문제에서 구한 정답은 이것을 포함한 큰 문제에서도 동일한 정답이다. 이러한 조건때문에 시간 복잡도를 훨씬 줄일 수 있습니다!!! 어떻게 구현할까요?? 메모이제이션(Memoization) 기법 활용 말 그대로 메모하는 기법입니다. 작은 문제 계산된 결과값을 배열을 사용해서 저장하고, 나중에 큰 문제에서 동일한 계산을 요구할 때 배열의 저장된 값을 불러오는 것입니다. -> dp 리스트 초기화해서 안..