https://github.com/sdoram/Algorithm_study
https://github.com/sdoram/git_basic
1. 프로그래머스 알고리즘 문제 - 약수 구하기
문제점
습관 처럼 += 으로 결과를 더 했는데 안 들어감
def solution(n):
answer = []
for i in range(1, n+1):
if n % i == 0:
answer += i
return answer
시도해 본 것들
append 사용
while문으로 해결
해결 방법
내가 푼 방법
def solution(n):
answer = []
for i in range(1, n+1):
if n % i == 0:
answer.append(i)
return answer
while문으로 바꿔본 방법
def solution(n):
answer = []
i = n+1
while i > 1:
i -= 1
if n % i == 0:
answer.append(i)
answer.sort()
return answer
팀원의 코드를 보고 만든 방법
def solution(n):
answer = []
[answer.append(i) for i in range(1, n+1) if n % i == 0]
return answer
팀원의 range 범위 최적화를 보고 만든 방법
# 팀원의 range 최적화
# for i in range(1,int(n**(1/2)+1)):
def solution2(n):
answer = []
answer.append(n)
for i in range(1, int(n/2)+1):
if n % i == 0:
answer.append(i)
answer.sort()
return answer
수포자라 팀원의 알고리즘은 지금도 잘 이해가 안 되는데 참고하면서 만들어봤다.
i * 2를 해서 n이 되는 수가 n을 빼면 약수의 끝이니까 저기까지만 돌면 되는 것 같다 생각했고 결과는 잘 나온다.
for문을 10 기준으로 print()했을 때 팀원의 코드는 3까지, 내 코드는 5까지 나오는데 이해가 안 가니 쓰기 어렵다.
알게 된 점
asnwer가 list로 돼있어서 append를 통해서 결과를 추가 해야했다.
한 번 푼 문제를 다른 식으로 바꾸는 것도 이해도를 높이기 좋은 방법 같다.
range를 도는 방식 자체를 깔끔하게 만들면 code의 효율성이 올라간다.
1. 프로그래머스 알고리즘 문제 - 가위 바위 보
문제점
while문으로 바꿔보는 중 IndexError: list index out of range 발생
def solution2(rsp):
rsp = list(rsp)
answer = ''
count = 0
while len(rsp) > count:
count += 1
if rsp[count] == '5':
answer += '2'
return answer
시도해 본 것들
dir로 함수 확인
. index() 시도
count += 1 바로 밑에 삽입하여 길이와 type 체크
print(type(count))
print(count)
count 위치를 while문 마지막으로 이동
해결 방법
def solution2(rsp):
rsp = list(rsp)
answer = ''
count = 0
while len(rsp) > count:
if rsp[count] == '5':
answer += '2'
elif rsp[count] == '2':
answer += '0'
else:
answer += '5'
count += 1
return answer
알게 된 점
count를 먼저 +1을 해버리면 len(rsp) +1까지 while문이 돌아서 if문에서 비교할 값이 없으므로 에러 출력
1. 프로그래머스 알고리즘 문제 - 영어가 싫어요
문제점
반복문을 이용해서 다시 푸는 중 replace가 두 개의 인자가 필요함.
def solution(numbers):
count = 0
answer = ''
num_list = ["zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"]
print(dir(numbers))
while len(numbers) > count:
if numbers.find(num_list[count]):
numbers = numbers.replace(num_list[count])
count += 1
return answer
시도해 본 것들
리스트에 리스트를 넣어서 인자를 두 개 받음
만들기는 했으나 테스트 시 몇 문제 런타임 에러 발생
def solution(numbers):
count = 0
num_list = [["zero", '0'], ["one", '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
while len(numbers) > count:
if numbers.find(num_list[count-1][0]):
numbers = numbers.replace(
(num_list[count][0]), (num_list[count][1]))
count += 1
return int(numbers)
작동하는 누더기 코드지만 런타임 에러 한 개로 줄어듦
def solution(numbers):
count = 0
num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
try:
while len(numbers) > count:
if numbers.find(num_list[count-count][0]):
numbers = numbers.replace(
(num_list[count][0]), (num_list[count][1]))
count += 1
except:
IndexError
return int(numbers)
if문 제거 했지만, 아직 런타임 에러 1개 발생
ef solution(numbers):
count = -1
num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
try:
while len(numbers) > count:
numbers = numbers.replace(
(num_list[count][0]), (num_list[count][1]))
count += 1
except:
IndexError
return int(numbers)
def solution(numbers):
count = 0
num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
while len(numbers) > count:
numbers = numbers.replace(
(num_list[count][0]), (num_list[count][1]))
count += 1
return int(numbers)
해결 방법
결국 while문을 포기했다.
def solution(numbers):
num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
for i in range(len(num_list)+1):
numbers = numbers.replace(
(num_list[i-1][0]), (num_list[i-1][1]))
return int(numbers)
완성한 for문을 찬찬히 뜯어보자 반복문의 조건이 len(num_list)으로 설정되어 있어서 바꿨더니 작동한다.
def solution(numbers):
count = 0
num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
while len(num_list) > count:
numbers = numbers.replace(
(num_list[count][0]), (num_list[count][1]))
count += 1
return int(numbers)
알게 된 점
while문이 너무 오래 도는 걸 생각하면서도 while문의 조건을 바꿀 생각을 안 했었다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-03-26 (0) | 2023.03.26 |
---|---|
TIL 23-03-25 (0) | 2023.03.25 |
TIL 23-03-23 (3) | 2023.03.23 |
TIL 23-03-22 (2) | 2023.03.22 |
TIL 23-03-21 (0) | 2023.03.21 |