[BOJ][Python] 1010 다리 놓기
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net [코드] 조합 문제를 푸는 방법으로 3가지가 있다. 1. combinations 함수 사용 2. factorial 함수 사용 3. 반복문 사용 1. combinations 함수 사용 코드 - 시간복잡도: O(m^n) - combinations 함수는 m개의 요소 중에서 n개의 요소를 선택하는 모든 조합을 생성한다. - 따라서 내부적으로 m개의 요소 중에서 n개를 선택하는 모든 경우의 수를..
[BOJ][Python] 15650 N과 M (2)
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net [코드] 15649 N과 M(1) 문제와 다른 점은 다음과 같다. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 고른 수열은 오름차순이어야 한다. i 가 재귀를 돌 때마다 1부터 시작하지 않으면 된다. 함수 인자로 1을 보내주고, 재귀를 돌 때 i + 1을 인자로 보내준다. #dfs x = [] def backtracking(start): if len(x) == m: prin..
[BOJ][Python] 15649 N과 M(1)
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net [코드] 1. 재귀를 사용해서 백트래킹 알고리즘 구현 #dfs // n = 3, m = 1 인 경우 코드 실행 순서 x = [] def backtracking():#5 14 23 if len(x) == m:#6 15 24 print(*x)#7 16 25 return #8 17 26 for i in range(1, n+1): #1 10 19 if i not in x:#2 11 20 x.a..
[BOJ][Python] 4134 다음 소수
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/4134 4134번: 다음 소수 정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오. www.acmicpc.net [코드] 범위가 매우 커서 x를 다 돌면 시간초과가 발생한다. 제곱근 이하까지만 돌면서 소수인지 확인한다. #S4_4134 다음 소수.py import sys input = sys.stdin.readline #isPrime def isPrime(x): if x == 0 or x == 1: return False for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True #main T ..
[BOJ][Python] 2485 가로수
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/2485 2485번: 가로수 첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가 www.acmicpc.net [코드] 아이디어 1. 각 나무의 간격의 최대 공약수를 구한다. 2. 간격을 최대공약수로 나누고 -1하면 심어야 하는 나무 개수 확인 필요한 코드 1. 각 나무 간격을 저장할 리스트 2. 각 나무 간격의 최대공약수를 구하는 유클리드 호제법 함수 3. 간격을 최대공약수로 나누고 -1 해주기 4. 3번 과정을 거쳐 심어야 하는 나무 총합 구하기 - 입력 받고, 간격 계산해서 리스트로 ..
[BOJ][Python] 1735 분수 합
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/1735 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net [코드] import sys input = sys.stdin.readline a, b = map(int,input().split()) x, y = map(int,input().split()) #유클리드 호제법 def gcd(f1,f2): if f2 > f1: f1, f2 = f2, f1 while f2 > 0: f1, f2 = f2, f1 % f2 return f1 def foun(a, x): global b, y, num1 a = a * ..
[BOJ][Python] 13241 최소공배수
·
🚩 Coding Test/Baekjoon
[문제]https://www.acmicpc.net/problem/13241 13241번: 최소공배수정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다. 예: 10은 5의 배수이다 (5*2 = 10) 10은 10의 배수이다(10*1 = 10) 6은 1의 배수이다(1*6 = 6) 20은 1, 2, 4,5,10,20의 배수이다. 다www.acmicpc.net [코드]1. 반복문으로 푼 풀이import sysinput = sys.stdin.readlinea, b = map(int,input().split())for i in range(1, min(a,b)+1): if a % i == 0 and b % i == 0: gcd = iprint(a * b // gc..
[BOJ][Python] 1620 나는야 포켓몬 마스터 이다솜
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net [코드] 아이디어: key를 숫자로 입력받고, key와 value가 반전된 딕셔너리를 만들어주어 key로 value를 찾아 출력해준다. - 딕셔너리를 두 개를 만드므로 메모리가 두 배로 소모된다. import sys input = sys.stdin.readline n, m = map(int,input().split()) po = {} for i in range..
[BOJ][Python] 7785 회사에 있는 사람
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net [코드] 딕셔너리 이용 import sys input = sys.stdin.readline n = int(input()) log = {} for i in range(n): name, state = map(str, input().split()) log[name] = state if state == 'leave': del(log[name]) print(..
[BOJ][Python] 14425 문자열 집합
·
🚩 Coding Test/Baekjoon
[문제] https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net [코드] import sys input = sys.stdin.readline n, m = map(int,input().split()) s = [] for i in range(n): s.append(input()) s = set(s) cnt = 0 for i in range(m): chk = input() if chk in s: cnt += 1 print(c..