전체 글

전체 글

    [백준_python] 최대공약수와 최소공배수 || 2609 (유클리드 호제법)

    [백준_python] 최대공약수와 최소공배수 || 2609 (유클리드 호제법)

    www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.www.acmicpc.net유클리드 호제법a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. (b가 0이 될 때까지 반복)gcd(24, 18) = gcd(18, 6) = gcd(6, 0) 최소공배수는 a*b/최대공약수 라고 한다.a, b = map(int, input().split(' ')) a_max = [] b_max = [] for i in range(1, a+1): if a % i == 0: a_max.append(i) for i in..

    [백준_python] 카드 2 || 2164 (스택, 큐, 덱)

    [백준_python] 카드 2 || 2164 (스택, 큐, 덱)

    www.acmicpc.net/problem/2164 2164번: 카드2N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가www.acmicpc.net스택(Stack)후입 선출(LIFO : Last-In First-Out): 상자가 차례로 쌓인다고 생각 : 가장 최근에 쌓인 상자가 가장 위에 있게 되고, 또 먼저 나가게 된다.큐(Queue)선입 선출(FIFO : First-In First-Out): 매표소라고 생각 : 가장 먼저 들어온 사람이 가장 먼저 나가게 된다.덱(Deque)double-ended queue : 큐의 전단(front)와 후단(rear)에서 모..

    [백준_python] 소수 찾기 || 1978

    [백준_python] 소수 찾기 || 1978

    www.acmicpc.net/problem/1978 1978번: 소수 찾기첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.www.acmicpc.net소수 : 자기 자신이랑 1이랑 약수를 지니고 있는 수 1은 소수가 아니고, 다른 수들이 소수인지 아닌지를 판별하기 위해서는 2부터 하나씩 수를 키워 나눠떨어지는 지 아닌지를 확인해봐야 한다.#소수 찾기 n = int(input()) m = list(map(int, input().split())) count = 0 #소수의 개수 for i in m: cnt = 0 if i == 1: #소수가 아님 continue #아래 코드를 실행하지 않고 건너뜀!!! #?또는 cnt +=1을 해준다...

    [백준_python] 이분 탐색 - 수 찾기 || 1920

    [백준_python] 이분 탐색 - 수 찾기 || 1920

    www.acmicpc.net/problem/1920 1920번: 수 찾기첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들www.acmicpc.net이분 탐색 left와 right를 정하고 중간값(mid)와 찾을 값을 비교해준다.! mid보다 찾을 값이 크다면 left값을 mid보다 1 큰 값으로 올려주기 (범위 → : 값이 큰 쪽으로) mid보다 찾을 값이 작다면 right값을 mid보다 1 작은 값으로 내려주기 ( ← 범위 : 값이 작은 쪽으로) 얼마동안? left right: result.append(0) p..

    [백준_python] 단어 정렬 || 1181

    [백준_python] 단어 정렬 || 1181

    www.acmicpc.net/problem/1181 1181번: 단어 정렬첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.www.acmicpc.net#단어 정렬 n = int(input()) arr = [] for _ in range(n): arr.append(input()) arr = list(set(arr)) #set으로 중복 제거, sort이용을 위해 다시 리스트 형으로 arr.sort(key = lambda x : (len(x), x)) print(*arr, sep = "\n")중복이 없어야 하니까 set()을 이용하여 중복을 없애준다. 그러나..

    [백준_python] 체크판 다시 칠하기 || 1018(다시 도전)

    [백준_python] 체크판 다시 칠하기 || 1018(다시 도전)

    www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.www.acmicpc.net이 문제는 일단 혼자서 생각해볼 시간도 부족하긴 했지만, 브루트포스 알고리즘으로 모든 경우를 다 거치기 위해 어떻게 해줘야 할지 정말 막막했다. 다른 분들 코드를 참고해보니, 8 x 8 체스판으로 만들어주며 주어진 체스판을 훑어주어야 해서 이를 위해 행과 열을 고정시켜주어야 했다.for i in range(n-7): for j in range(m-7): #8*8크기의 체스판을 위해 행,열 고정 cntW = 0..

    [백준_python] 행렬 곱셈 || 2740

    [백준_python] 행렬 곱셈 || 2740

    www.acmicpc.net/problem/2740 2740번: 행렬 곱셈첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개www.acmicpc.net# #행렬 곱셈 N , M = map(int, input().split(' ')) a = [] b = [] for _ in range(N): a.append(list(map(int, input().split(' ')))) M , K = map(int, input().split(' ')) for _ in range(M): b.append(list(map(int, input().split(' '))))..

    [백준_python] 배수와 약수 || 5086

    [백준_python] 배수와 약수 || 5086

    www.acmicpc.net/problem/5086 5086번: 배수와 약수각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.www.acmicpc.net주어진 조건대로 약수인지, 배수인지, 그 외인지 확인해주기만 하면 된다.!#배수와 약수 while True: a, b = map(int, input().split(' ')) if a == b == 0: break if b % a == 0: print("factor") elif a % b == 0: print("multiple") else: print("neither")

    [백준_python] 수 정렬하기 || 2750

    [백준_python] 수 정렬하기 || 2750

    www.acmicpc.net/problem/2750 2750번: 수 정렬하기첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.www.acmicpc.netn만큼 원하는 수를 받아서 리스트에 담고 정렬해주기!#수 정렬하기 n = int(input()) num = [] for _ in range(n): num.append(int(input())) num.sort() print(*num, sep = "\n")

    [백준_python] 분해합 || 2231

    [백준_python] 분해합 || 2231

    www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 먼저 for문을 이용해서 1부터 차례대로 분해합을 구하고, n과 일치하면 생성자를 출력하면 된다.! #분해합 n = int(input()) result = 0 for i in range(1, n+1): arr = list(map(int, str(i))) #분해합 구하기 num = i + sum(arr) if num == n: result = i break print(result)