230809 온라인 스터디 & 프로그래머스 문제풀기
* 소인수분해 문제는
어떻게 문제를 해결해야할지 감을 못잡다가 while문을 써서 풀어봤는데 실행시간이 너무 오래걸렸다 ,,
다 while문에 넣지 않고 밑에 for문을 써주면 간단하지는 않지만 실행은 되는 코드를 발견했다.
def solution(n):
prime_factor = []
answer = []
i = 2
while i <= n:
if n % i == 0:
prime_factor.append(i)
n //= i
else:
i += 1
for x in prime_factor:
if x not in answer:
answer.append(x)
return answer
좀 많이 길긴하다 ,,
근데 while문만 써도 풀리는 문제였다..
def solution(n):
answer = []
i = 2
while i <= n:
if n % i == 0:
n //= i
if i not in answer:
answer.append(i)
else:
i += 1
return answer
이렇게 하면 해결되는 문제 ,,
나는 n //= if를 if i not in answer: 안에다 넣어줬었는데, 그 위에 써줘야 되는거였나보다 ,, ㅠ
*2의 영역 문제는
하 ......... 모르겠다 모르겠어 .......
나에게 답을 줘라 줘 .....
이건 누군가에게 물어봐야할 것 같다 ^-ㅠ
시간이 너무 많이 들었다 ㅠ
그래서 스터디장님께 힌트를 얻었다 !
def solution(arr):
for i in arr:
if i == 2:
a = arr.index(i)
for i in arr[::-1]:
if i == 2:
b = arr.index(i)
return [-1]
for i in arr[a:b+1]:
return i
이렇게 짜 보았는데 ... 음 .....
안되네 (;′⌒`)
오프라인 스터디할 때 가져가서 물어봐야겠다 ^^ .........

* 조건에 맞게 수열 변환하기 2 문제에서
일단
def solution(arr):
answer = []
count = 0
while answer != arr:
answer = arr
for i in range(len(arr)):
if arr[i] >= 50 and arr[i] % 2 == 0:
arr[i] //= 2
elif arr[i] < 50 and arr[i] % 2:
arr[i] = (arr[i]*2) + 1
else:
arr[i] = arr[i]
count += 1
count += 1
return count
머리가 굴러가는대로 코드를 짜봤지만 실 패 ㅋ ..
검색찬스를 써서 all()함수와 zip()함수를 써서 문제를 해결하는 방법을 찾았다 !
파이썬 내장함수 중 any()와 all()이 있다. 둘은 아큐먼트로 iterable한 객체를 받는데 이 객체를 돌면서 조건을 검사해 답을 True/False의 답을 반환한다.
- any() : 하나라도 True인게 있으면 True
- all() : 모두 True여야 True 반환
쉽게 생각해 any는 or, all은 and 연산이라 보면 된다.
EX)
>>> any([False, False, False])
False
>>> any([False, True, False])
True
>>> all([False, True, False])
False
>>> all([True, True, True])
True
아래의 링크를 참고하면 좋을 것 같다 !
[Python] 파이썬 any 와 all 언제 어떻게?
all 함수란? > all 함수는 인자로 받은 모든 요소가 참(True)이면 참(True)을 반환하고 하나라도 거짓(False)이면 거짓(False)을 반환한다. 단, all 이라는 함수는 인자로 반복 가능한 (iterable) 자료형을 받
velog.io
그리고 zip()함수는
>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for i in range(3):
... pair = (numbers[i], letters[i])
... print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')
이렇게 사용하는 함수이다 ! 기억이 흐릿해져서 다시 찾아봤다 !
https://www.daleseo.com/python-zip/
파이썬의 zip() 내장 함수로 데이터 엮기
Engineering Blog by Dale Seo
www.daleseo.com
그래서 이 문제를 해결해보면
def solution(arr):
count = 0
prev = arr
while True:
change = []
for i in prev:
if i >= 50 and i % 2 == 0:
change.append(i // 2)
elif i < 50 and i % 2:
change.append(i*2 +1)
else:
change.append(i)
same = all(a == b for a,b in zip(prev,change))
if same:
break
count += 1
prev = change
return count
이렇게 풀 수 있다 ,,
이 코드를 녹여내는데에 시간이 좀 걸렸다 ,,
코드잇 강의는 내일부터 들어봐야겠다 ..!
화이팅하자고 ,,~!