첫주에 배운건 자료구조적인 느낌보단 전반적인 알고리즘에 익숙해지는 느낌이었다. 나중에 깃에 모아서 올릴 생각이다.
사실 첫주에 배운게 2주전이다.. 블로그를 시작하기 전이니까 정리해보면서 복습하려고 파일들을 열었는데 주석처리가 안되어 있으니까 어떤 문제였는지 다시 생각해봐야 한다.. 이래서 주석이랑 깔끔하게 정리해 두는 습관이 중요한것 같다. 앞으로는 체계적이고 주석남겨가면서 꼼꼼히 정리해야겠다.
서론이 길었고 시작해야겠다. 아마 코드들이랑 간단한 리뷰들만 쓸 것 같다.
1. 가장 많은 알파벳을 출력
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
# 이 부분을 채워보세요!
alphabet_array = [0] * 26
for char in string :
if not char.isalpha():
continue
arr_index = ord(char) - ord("a")
alphabet_array[arr_index] += 1
max_occurrence = 0
max_alphabet_index = 0
for index in range(len(alphabet_array)):
alphabet_occurrence = alphabet_array[index]
if alphabet_occurrence > max_occurrence:
max_alphabet_index = index
max_occurrence = alphabet_occurrence
return chr(max_alphabet_index+ord('a'))
result = find_max_occurred_alphabet(input)
print(result)
가장 많은 알파벳을 출력하는 코드였다. 아스키 코드를 좀 이용해서 나름 재밌었던 코드.
2. 반복되지 않은 알파벳 중 처음걸 출력
input = "abadabace"
def find_not_repeating_character(string):
# 이 부분을 채워보세요!
alphabet_array = [0] * 26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord("a")
alphabet_array[arr_index] += 1
non_occurred = []
for index in range(len(alphabet_array)):
if alphabet_array[index] == 1:
non_occurred.append(chr(index + ord('a')))
for char in string:
if char in non_occurred:
return char
return non_occurred
result = find_not_repeating_character(input)
print(result)
이 코드를 오랜만에 보면서 내용적인거야 쉽게 기억이 났는데 이게 어떤코드인지 함수 이름만보고 딱 떠올라 버린게 너무 신기했다. 이래서 코드내역이 중요한가 싶다.
3. 더하거나 곱해서 가장큰수를 만드는 문제
input = [0, 3, 5, 6, 1, 2, 4]
def find_max_plus_or_multiply(array):
# 이 부분을 채워보세요!
multiply_sum = 0
for number in array:
if number <=1 or multiply_sum <=1:
multiply_sum += number
else:
multiply_sum *= number
return multiply_sum
result = find_max_plus_or_multiply(input)
print(result)
개인적으로 되게 재밌어하는 부류의 문제였다.
4. 소수찾기
#소수를 찾는 문제
input = 20
def find_prime_list_under_number(number):
# 이 부분을 채워보세요!
lst = []
for a in list(range(2,number+1)):
for b in list(range(a+1,number+1)):
if (b%a == 0):
lst.append(b)
lst = list(set(lst))
full_lst = list(range(1,number+1))
sosu_lst = [x for x in full_lst if x not in lst]
return sosu_lst
result = find_prime_list_under_number(input)
print(result)
과제 같은걸로 나온 퀴즈였다. 처음에 어떻게 할까.. 고민하다가 그냥 20까지면 1부터 20까지의 리스트를 만들고 2부터 배수들을 차례대로 리스트에서 제거하면 되지않을까? 생각한후에 쓱삭쓱삭 만든 코드. 더 좋은 알고리즘이 있을거 같긴 하다.
5. 01001 몇번 뒤집으면 11111이나 00000이될까요
# 01001 < 2번 뒤집으면 원래대로 돌아오는 문제.
input = "010110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
# 이 부분을 채워보세요!
flag = 1
a_count= 0
b_count = 0
for a in range(len(string)-1):
if (string[a] == string[a+1] == '1'):
a_count-=1
if (string[a] == string[a+1] == '0'):
b_count-=1
for b in string:
if b == '1' : a_count +=1
else : b_count +=1
return min(a_count,b_count)
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
오셀로게임 생각나는 문제였다. 그래서 엄청 복잡하게 접근하려다가 생각해보니 1을 바꾸든 0을바꾸든 하나만 바꾸고 둘중에서 적게 바꾸는게 답인게 당연한 문제라서 쉽게 풀린 문제. 1주차 과제들은 생각보다 엄청 쉬웠다. 백준 문제들 푼 느낌이었다!
'Python > 알고리즘공부' 카테고리의 다른 글
05_catchme 문제! ( 상반기 line인턴채용문제) (1) | 2021.11.05 |
---|---|
04_ 피보나치 수열 및 여러 문제들(hard) (0) | 2021.10.29 |
03_ DFS , BFS (0) | 2021.10.29 |
02_heap (0) | 2021.10.29 |
00_공부시작 배경 (0) | 2021.10.28 |