1. 프로그래머스 알고리즘 문제
문제점
알고리즘 문제 풀이 중 n 이하의 짝수를 모두 더하는 문제에서 그 이하의 짝수를 더하는 방법 구하는 중 값이 나오지 않고 실행시간이 10초를 넘어감
def solution(n):
answer = 0
if n % 2 == 0:
answer += n
while True:
n -= 1
if n % 2 == 0:
answer += n
return answer
print(solution(10))
시도해 본 것들
while True:로 구해보기
while True():로 구해보기
while True(n):로 구해보기
while n > 0:로 구해보기 <- 해결
해결 방법
while n > 0:
n -= 1
if n % 2 == 0:
answer += n
return answer
알게 된 점
컴퓨터가 계속 돌아가서 왜 그런가 했는데 while True면 무한루프였다.
while문을 생각해 낸 것까진 좋았는데 while True가 기억에 남아있었다.
문제점
분수는 만들었지만 기약분수로 나타낼 방법을 알지 못함.
def solution(numer1, denom1, numer2, denom2):
numer = 0
# 공배수로 곱하기
denom = denom1 * denom2
numer1 = numer1 * denom / denom1
numer2 = numer2 * denom / denom2
numer = numer1 + numer2
answer = [numer, denom]
return answer, denom / numer
print(solution(1, 2, 3, 4))
어찌어찌 나눴는데 나누면 안 되는 것까지 나눠버림
def solution(numer1, denom1, numer2, denom2):
numer = 0
# 분모 공배수로 곱하기
denom = denom1 * denom2
# 분자
numer1 = numer1 * denom / denom1
numer2 = numer2 * denom / denom2
numer = numer1 + numer2
for n in range(1, 1000):
if (numer / n) and (denom / n) > int(n):
numer = numer / int(n)
denom = denom / int(n)
answer = [numer, denom]
return answer
print(solution(1, 2, 3, 4))
시도해 본 것들
python 소수 찾는 방법 검색 <-실패
숫자 범위만큼의 range 설정하고 찾기 <- 분수를 소수점 단위로 나눠버림
int를 사용해서 소수점으로 나눠지는지 확인하기 <- 문제 정답률 80%
while문으로 여러 번 나오는 공약수 다시 돌기 <- 해결
해결 방법
number = 0
# 공약수 찾기
# 여러번 나오는 공약수 제거를 위한 while문
while number < 1000:
for n in range(1, 1000):
number += 1
# 나눴을 때 소수점 확인
if numer / n == int(numer / n) and denom / n == int(denom / n):
numer = numer / n
denom = denom / n
continue
알게 된 점
math같은 모듈이 없어도 만들 수 있는 문제들이구나.
헤맸지만 끝내 스스로 해결가능하니 너무 재밌다.
조건문 반복문은 신인가?
이번에도 while문이 해결해 줬다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-03-23 (3) | 2023.03.23 |
---|---|
TIL 23-03-22 (2) | 2023.03.22 |
TIL 23-03-20 (0) | 2023.03.20 |
TIL 23-03-19 (0) | 2023.03.19 |
TIL 23-03-18 (0) | 2023.03.18 |