👉 오늘 한 일
프로그래머스 문제풀이
1. 소인수분해 📌
- 프로그래머스 level 0. 소인수분해
- 정답률 79%, try 2
- 처음 시도한 코드 : 1, 7, 16, 23, 24 실패(정확성 79.2)
- n이 1보다 클때만 반복. 2부터 시작해서 i로 나누어 떨어지면 리스트에 추가
n //= i
해준 뒤 for문을 멈춰주지 않았기 때문에 의도한대로 구현이 되지 않았음!
def solution(n):
result = []
while n > 1:
for i in range(2, n+1):
if n % i == 0:
result.append(i)
n //= i
result = sorted(list(set(result)))
return result
- retry => break를 추가해서 n이 i로 나누어 떨어지면 for문을 멈춰줌
def solution(n):
result = []
while n > 1:
for i in range(2, n+1):
if n % i == 0:
result.append(i)
n //= i
break
result = sorted(list(set(result)))
return result
- 다른 사람 풀이
- i가 n보다 작을 때만 반복. i를 1씩 증가시키며 소인수를 리스트에 추가한 뒤 중복 제거
def solution(n):
result = []
i = 2
while i <= n:
if n % i == 0:
result.append(i)
n //= i
else:
i += 1
result = sorted(list(set(result)))
return result
2. 공 던지기
- 정답률 79%
- k번째에 공을 던지는 사람의 번호를 result에 추가. 한 바퀴를 돌때마다 인덱스를 초기화시킴(리스트의 길이가 짝수면 if문에만 걸리고 홀수면 elif문과 if문을 번갈아서 돌게 됨). result의 마지막 원소를 return
def solution(numbers, k):
idx = -2
length = len(numbers)
result = []
for _ in range(k):
idx += 2
if idx == length:
idx = 0
elif idx == length + 1:
idx = 1
result.append(numbers[idx])
return result[-1]
def solution(numbers, k):
return numbers[2 * (k - 1) % len(numbers)]