목록전체 글 (69)
야금야금 공부
풀이 # 연산자는 앞에서부터 # 나눗셈은 정수 나눗셈으로 몫만 취함 # 음수를 양수로 나눌 때, 양수로 바꾼뒤 몫을 구하고 음수로 변환 from itertools import permutations N = int(input()) num = list(map(int, input().split())) sign_list = list(map(int, input().split())) sign = ['+', '-', '*', '/'] op = [] for i in range(len(sign_list)): for j in range(sign_list[i]): op.append(sign[i]) result = [] for i in permutations(op, N-1): calc = num[0] for j in rang..
문제 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다. 입력 입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다. 출력 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. 예제 입력 1 60 100 예제 출력 1 6..
문제 동호는 내년에 초등학교를 입학한다. 그래서 동호 어머니는 수학 선행 학습을 위해 쉽게 푸는 문제를 동호에게 주었다. 이 문제는 다음과 같다. 1을 한 번, 2를 두 번, 3을 세 번, 이런 식으로 1 2 2 3 3 3 4 4 4 4 5 .. 이러한 수열을 만들고 어느 일정한 구간을 주면 그 구간의 합을 구하는 것이다. 하지만 동호는 현재 더 어려운 문제를 푸느라 바쁘기에 우리가 동호를 도와주자. 입력 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. 출력 첫 줄에 구간에 속하는 숫자의 합을 출력한다. 예제 입력 1 3 7 예제 출력 1 15 풀이 a, b = map(int, input..
문제 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 입력 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. 출력 주어진 수들 중 소수의 개수를 출력한다. 예제 입력 1 4 1 3 5 7 예제 출력 1 3 풀이 N = int(input()) num = list(map(int, input().split())) ans = [] for i in num: cnt = 0# 나누었을 때 0이 되는 숫자의 개수 for j in range(1, i + 1): if i % j == 0: # 입력 받은 숫자를 1부터 자기자신의 수까지 나누어, 나머지가 0인 횟수를 구함 cnt += 1 ans.append(cnt)# ..
위장 해시를 사용하는 문제 풀이 def solution(clothes): hash = {} # hash를 초기화 => {"옷 종류" : 0} for n, t in clothes: hash[t] = 0 # 옷 종류별로 가진 옷의 수를 해시에 넣음 for key in hash.keys(): cnt = 0 for n, t in clothes: if key == t: cnt += 1 hash[key] = cnt value = list(hash.values()) # [2, 1] ans = 1 # 경우의 수를 계산 for i in value: ans *= (i + 1) # ans = 6 return ans - 1 # 옷을 모두 안 입을 경우를 제외 [예제1의 경우] 종류 의상 "headgear" 2 "eyewear..
전화번호 목록 해시를 사용한 문제 내가 푼 풀이(실패) while True로 인해 실행시간 초과로 나와서, 중복되는 값들을 제거해 주었음에도 효율성 부분에서 모두 실패가 나왔다. def solution(phone_book): answer = 0 phone_book.sort() # 정렬 # 정렬시켜 제일 길이가 작은 문자열을 찾을 접두사 find 로 지정 find = phone_book[0] while True: v = [] # 찾을 접두어의 길이만큼 다른 요소들의 값을 슬라이싱해 리스트에 저장 for i in range(1, len(phone_book)): v.append(phone_book[i][:len(phone_book[0])]) for idx, value in enumerate(v): # 찾을 접..