목록알고리즘/baekjoon (40)
hi jaeneee

https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다. www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline t = int(input()) answer = [] for i in range(0, t): x1, y1, r1, x2, y2, r2 = map(int, input().split()) distance = ((abs(x2 - x1))**2 + abs((y2 - y1))**2)**(1/2) if distance == 0: if r1 == r2: answe..

https://www.acmicpc.net/problem/18110 18110번: solved.ac 5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다. www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = int(input()) difficulty = [] for i in range(0, n): a = int(input()) difficulty.append(a) difficulty.sort() exceptNum = round(n * 0.15 + 0.000000001..

https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 1) 문제 문제가 기니까 생략! 2) 예시 3) 제출 import sys input = sys.stdin.readline n, m = map(int, input().split()) li = dict() answer = "" for i in range(1, n + 1): pocketmon = input().rstrip() li[pocketmon] = i li[i] = p..

https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline microwave = [300, 60, 10] t = int(input()) if t % 10 == 0: answer = list() for i in microwave: tmp = (t // i) t -= i * tmp answer.append(tmp) for i in answer: pri..

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys import heapq input = sys.stdin.readline n = int(input()) answer = 0 card = [] for i in range(0, n): heapq.heappush(card, int(input())) while len(card) > 1: tmp = heapq.heappop(card) tmp ..

https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = list(map(int, input().rstrip())) answer = "" if 0 not in n: answer = "-1" elif sum(n) % 3 != 0: answer = "-1" else: n.sort(reverse=True) for i in n: answer += str(i..

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline sentence = input().rstrip() answer = 0 plusSen = sentence.split("-") for i in range(0, len(plusSen)): tmpSum = 0 tmpLi = plusSen[i].split("+") for k in tmpLi: tmpSu..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n, m = map(int, input().split()) li = list(map(int, input().split())) sumLi = [0] for i in range(0, len(li)): sumLi.append(li[i] + sumLi[i]) answer = "" for k in range(0, m): i, j = map(int, input().split()) answer += str(sumLi[j] - sumLi[i - 1]) + "\n" print(answer.rstrip()) 4) 메모리/시간/코드 길이 5) PLUS 처음에 해결했지만 시간초과 난 방법 = > 슬라이싱 이용 BUT: N의 최..

1) 문제 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 2) 예시 3) 제출 import sys input = sys.stdin.readline m, n = map(int, input().split()) # 구한 소수 집어 넣을 리스트 선언 primeNum = [] def isPrime(x): # 1일 경우를 예외 처리 if x = len(li) - 1: break if li[i] < m: g = i for k in range(i + 1, len(li)): if li[k - cnt] % li[i] == 0: li.pop(k - cnt) ..

1) 문제 2) 예시 3) 제출 # 첫 번째 제출한 코드 import sys input = sys.stdin.readline padovan = [] def padovan(n): if n

1) 문제 2) 예시 3) 제출 from collections import deque import sys input = sys.stdin.readline n = int(input()) li = deque() result, cnt = "", 0 for i in range(0, n): order = input().split() if order[0] == "push": li.append(order[1]) cnt += 1 elif order[0] == "pop": if cnt == 0: result += "-1" else: result += str(li.popleft()) cnt -= 1 result += "\n" elif order[0] == "size": result += str(cnt) result += ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline m = int(input()) n = int(input()) primeList = [] def isPrime(n): for i in range(2, n): if n % i == 0: return False return True for k in range(m, n + 1): if k == 1: continue elif isPrime(k) == True: primeList.append(k) if len(primeList) == 0: print(-1) else: print(sum(primeList)) print(min(primeList)) 4) 메모리/시간/코드길이 5) PLUS 9일 전에 안 풀려서 포기했던 ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline def constructor(index): global num sum = 0 tmp = origin[index] sum += tmp while tmp > 0: sum += tmp % 10 tmp = tmp // 10 if sum in num: num.remove(sum) origin = list(set(range(1, 10001))) num = list(set(range(1, 10001))) for k in range(0, len(num)): try : constructor(k) except IndexError: break for g in range(0, len(num)): print(num[g]) 4) ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = int(input()) li = list(map(int, input().split())) print(min(li) *max(li)) 4) 메모리/시간/코드길이 5) PLUS 어떻게 풀어야 하는지 도저히 감이 안 잡혀서 구글을 찾아봤는데 매우 간단하고 답이 바로 나오는 문제였다,, 해결책을 알고는 5분만 더 고민해 볼 것을 후회했다. 약수는 소인수분해를 해서 구하기 때문에 예를 들어, 이렇게 될 수 있기 때문에 입력받은 수에서 최소와 최대를 구해 곱하면 문제에서 원하는 답을 찾을 수 있다.

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = int(input()) nList = list(map(int, input().split())) m = int(input()) mList = list(map(int, input().split())) for i in range(0, len(mList)): if mList[i] in nList: mList[i] = 1 else: mList[i] = 0 print(*mList) import sys input = sys.stdin.readline n = int(input()) nList = list(map(int, input().split())) m = int(input()) mList = list(map(..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline word = list(set([input().rstrip() for _ in range(int(input()))])) word.sort() word.sort(key=lambda x:len(x)) for i in range(len(word)): print(word[i]) 4) 메모리/시간/코드길이 5) PLUS https://pydole.tistory.com/entry/strip-rstrip-lstrip-%EA%B3%B5%EB%B0%B1%EA%B3%BC-%EB%AC%B8%EC%9E%90-%EC%A0%9C%EA%B1%B0-%ED%95%A8%EC%88%98 [Python] strip, rstrip, lstrip..

1) 문제 2) 예시 3) 제출 import math import sys input = sys.stdin.readline n = int(input()) num = [int(input()) for _ in range(n)] num.sort() def mode(n, num): cnt = list(range(1, n+1)) cnt = [[] for k in range(0, n+1)] count = 1 maximum = 1 for k in range(1, n): if num[k] == num[k-1]: count += 1 else: cnt[count].append(num[k-1]) maximum = max(count, maximum) count = 1 if k == n-1: cnt[count].append(nu..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n, m = map(int, input().split()) origin = list(range(1, n+1)) want = list(map(int, input().split())) tmp = origin.index(want[0]) cnt = min(tmp, len(origin)-tmp) for i in range(1, m): origin.pop(tmp) # first = abs(origin.index(want[i]) - tmp) # second = abs(len(origin) - first) # cnt = min(first, second) cnt += min(abs(origin.index(want[i]) ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n, k = map(int, input().split()) queue = list(range(1, n+1)) res = "") 4) 메모리/시간/코드길이 5) PLUS (처음 시도했던 방법) import sys input = sys.stdin.readline queue = [] n, k = map(int, input().split()) queue = [num for num in range(1, n + 1)] res = "" print(res) => k 만큼 pop과 append를 반복하고 k 반복문을 빠져나갈 때 res라는 문자열에 저장을 해주었다. 결과적으로 시간 초과가 났다,, 어떻게 해야 할지 한참 ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline a,b = input().split() listA, listB = list(a), list(b) minimum = len(listA) for k in range(0, len(listB)-len(listA)+1): tmp = len(listA) # listA 첫 부분부터 일치하는지 확인 for i in range(0, len(listA)): if listA[i] == listB[i+k]: tmp -= 1 minimum = min(minimum, tmp) print(minimum) 4) 메모리/시간/코드길이 5) PLUS (처음 제출한 코드) import sys input = sys.stdin.readline..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline # n = 끊어진 기타줄 개수, m = 기타줄 브랜드 개수 입력받기 n, m = map(int, input().split()) # 첫 번째 브랜드의 패키지와 낱개 가격 입력 받기 sixPrice, onePrice = map(int, input().split()) # 2~m까지의 브랜드 가격을 tmp로 입력받고 최솟값을 각 가격에 저장 for i in range(1, m): tmp1, tmp2 = map(int, input().split()) sixPrice, onePrice = min(sixPrice, tmp1), min(onePrice, tmp2) # 낱개보다 패키지로 사는 것이 더 쌀 경우 if six..

1) 문제 2) 예시 X 3) 제출 def solve(a): ans = sum(a) return ans 4) 메모리/시간/코드길이 5) PLUS 리스트 합 구하기 sum(리스트명) 그냥 한 번도 안 풀어본 함수 문제라 심심해서 풀었는데 1-2분? 만에 풀었다,,

1) 문제 2) 예시 3) 제출 import sys import math input = sys.stdin.readline sen = "" for i in range(int(input())): n, m = map(int, input().split()) sen += str(math.comb(max(n, m), min(n, m))) + "\n" print(sen) 4) 메모리/시간/코드길이 5) PLUS 겹치지 않게 한다는 말을 m에서 n개만큼 뽑아내고 n을 위에서부터 순서대로 이어주면 된다고 이해했다. (문제에서 n

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline def stick(x): origin = 64 sum = 0 cnt = 0 # 구할 막대기의 길이가 전체 합보다 작을!경우 -> 같으면 안 됨!! 같으면 빠져나와야 함! while sum 원래의 막대 길이를 origin에 저장, origin을 계속 ..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = int(input()) list_a = list(map(int, input().split())) list_b = list(map(int, input().split())) list_a.sort() s = 0 for g in range(len(list_a)): s += list_a[g] * max(list_b) list_b.remove(max(list_b)) print(s) 4) 메모리/시간/코드길이 5) PLUS a리스트의 최소와 b리스트의 최대를 곱해서 더해야 최소값이 나온다.

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n, k = map(int, input().split()) coin = [int(input()) for _ in range(n)] cnt = 0 while k != 0: tmp = k // coin[len(coin) - 1] if tmp > 0: k -= tmp * coin[len(coin)-1] cnt += tmp coin.pop(len(coin)-1) print(cnt) 4) 메모리/시간/코드길이 5) PLUS (ash silver의 문제 해결 과정) 1. n, k를 split으로 한 번에 입력받기 2. coin 리스트를 반복문을 이용해 한 줄로 입력받기 3. cnt는 동전 최소 개수 4. k 원이 0..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline n = int(input()) distance = list(map(int, input().split())) price = list(map(int, input().split())) def lowprice(total): small = price[0] drive, cost, k = 0, 0, 0 for i in range(0, sum(distance)): if drive == distance[k]: k += 1 drive = 0 small = min(price[k], small) drive += 1 cost += small return cost print(lowprice(sum(distance))) 4) 메모리..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline cnt = 0 def checkgroup(sen): li = list(sen) tmp = [li[0]] for k in range(len(li)-1): # li[i]에 저장된 문자열의 길이만큼 반복 for a in range(len(tmp)-1): # tmp에 저장된 문자열의 길이만큼 반복 if li[k] == tmp[a]: # li의 해당 문자가 tmp에 있으면 return 0 # 그룹 단어X if li[k] != tmp[len(tmp)-1]: tmp.append(li[k]) # tmp에 li문자 추가 return 1 for i in range(int(input())): cnt = cnt + checkg..

1) 문제 2) 예시 3) 제출 import sys input = sys.stdin.readline def fib(n): if n == 0: return 0 elif n == 1 or n == 2: return 1 else: return fib(n - 1) + fib(n - 2) print(fib(int(input()))) 4) 메모리/시간/코드길이 5) plus (ash silver의 문제 해결 과정) 1. 피보나치 수열 함수 정의 2) 입력과 동시에 함수에 입력 후 출력 import sys input = sys.stdin.readline def fib(n): if n

1) 문제 2) 예시 3) 제출 li = list(input())#한 번에 문자열 입력 받기 cnt = len(li) for i in range(1, len(li)): if li[i] == '=': # dz= if i > 1 and li[i-1] == 'z' and li[i-2] == 'd': cnt = cnt - 2 # c=, s=, z= elif li[i-1] == 'c' or li[i-1] == 's' or li[i-1] == 'z': cnt = cnt - 1 # c-, d- if li[i] == '-' and (li[i-1] == 'c' or li[i-1] == 'd'): cnt = cnt - 1 # lj, nj if li[i] == 'j' and (li[i-1] == 'l' or li[i-1] ..