
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
다름이 아니라 문자열 뒤집기, n 이하의 소수 나열하기 문제를 다음과 같이 작성해 보았습니다.
input 예시가 하나씩밖에 없어서 제가 작성한 답이 맞는지 확신이 서지 않습니다.
답안이 맞는지, 더 간결한 알고리즘이 있는지 궁금합니다.
#문자열 뒤집기
input = "011110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
# 얼마나 자주 바뀌었는가 체크합니다
how_often = change_num(string)
# how_often에 저장된 정수를 n이라 하면 짝수면 n / 2 홀수면 n / 2 + 1이므로,
# (n / 2) + (n % 2)를 하면 일관적입니다.
return (how_often / 2) + (how_often % 2)
# 0이 나오다가 1, 또는 1이 나오다가 0이 되는 횟수가 얼마나 되는지 구합니다.
def change_num(string):
str_itr = len(string) - 1
result = 0
for i in range(str_itr):
# 인접한 두 항이 같지 않으면 result에 1을 증가시킵니다.
if string[i] != string[i + 1]:
result += 1
return result
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
# n 이하 소수 출력
input = 20
def find_prime_list_under_number(number):
result = []
list_of_num = list(range(2, number + 1))
temp_1 = list_of_num[0]
while list_of_num:
temp_1 = list_of_num[0]
result.append(temp_1)
for i in list_of_num:
if i % temp_1 == 0:
list_of_num.remove(i)
return result
# 이중for문이라 굉장히 신경이 쓰입니다. 에라토스테네스의 체를 이중 for문을 쓰지 않고 구하는 법을 알고싶습니다.
result = find_prime_list_under_number(input)
print(result)
