하루 코테 3개 풀기 - 5일차
1. 소수 나열하기(백준1929)
Q.정수를 입력 했을 때, 그 정수 이하의 소수를 반환하시오
소수는 자신보다 작은 두 개의 자연수를 곱하여 만들 수없는 1보다 큰 자연수이다.
def find_prime_list_under_number(x) :
prime_list=[]
#2~20까지 찾아서 소수인가? 소수라면 위의 prime_list 배열에 넣어라
for n in range(2, x +1) : # 2 ~ n까지의 숫자들이 n에 들어가는 것을 반복한다.
#n이라는 숫자가 소수인지 아닌지를 알기 위해서는 자신과 1 외의 나머지를 가질 수 없다. 를 활용한다.
for i in range(2,n) : #n을 포함하지 않은 2~n 의 자연수들의 나눔
if n % i == 0 : #나눴을때 0이 나오면 소수가 아니기 때문에 break 로 중단한다.
break
else:
prime_list.append(n)
근데 이러면 모든 수를 검사해서 해야 하기 때문에 범위를 줄여야한다.
백준 1929[소수 구하기] : 파이썬 & 시간초과 해결방법 & 소수 판정, 에라토스테네스의 체
📎 Problem https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
imdona.tistory.com
N, M = map(int, input("두 값을 입력하세요:").split())
def find(N,M):
for i in range(N, M+1):
if i > 1 :
for x in range(2 , int(i ** 0.5) + 1) :
if i%x == 0 :
break
else :
print(i)
find(N,M)
2.문자열 뒤집기(백준1439)
Q. 0과 1로만 이루어진 문자열이 주어졌을 때, 이 문자열에 있는 모든 숫자를 전부 같게 만들려고 한다. 할 수 있는 행동은 문자열에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.
예를 들어 S=0001100 일 때, 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다. 하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다. 주어진 문자열을 모두 0 혹은 모두 1로 같게 만드는 최소 횟수를 반환하시오.
#수가 0일때 앞의 1일 때와 0 으로 바꾸는 경우
#앞의 수가 0일때 0으로 바꾸는 방법
input = "011110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
count_to_all_zero = 0
count_to_all_one = 0
if string[0] == '1' :
count_to_all_zero += 1
elif string[0] == '0':
count_to_all_one += 1
for i in range(len(string) - 1) :
if string[i] != string[i+1] :
if string[i+1] == "1" :
count_to_all_zero += 1
if string[i+1] == "0" :
count_to_all_one += 1
print (count_to_all_zero, count_to_all_one)
return min(count_to_all_zero, count_to_all_one)
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
구글링 하다가 찾은 쉬운 방법.
S = input()
count = 0
for i in range(len(S)-1):
if S[i] != S[i+1]:
count += 1
print((count + 1) // 2)
3. 가장 많이 받는 선물 (프로그래머스 LV.1)
def solution(friends, gifts):
answer = 0
array = {k: {j:0 for j in friends if j != k} for k in friends}
given_a = {k: 0 for k in friends}
target_a = {k : 0 for k in friends}
for items in gifts :
send, target = items.split()
array[send][target] += 1
given_a[send] +=1
target_a[target] +=1
#이제다음달 얼마나 . 더받을지 보기
for k, kk in array.items():
count1 = 0
for kk , aa in array[k].items():
if array[k][kk] > array[kk][k] :
count1 += 1
elif array[k][kk] == array[kk][k] :
if given_a[k] - target_a[k] > given_a[kk] - target_a[kk] :
count1 += 1
answer = max(answer, count1)
return answer
https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
ㅠㅠ..
참고한 풀이 법