-
Notifications
You must be signed in to change notification settings - Fork 1
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
직관적인 풀이 내용으로 코드도 읽기 쉬워서 리뷰하기도 좋았습니다! 감사합니다!
|
||
# 에라토스테네스의 체 | ||
for i in range(2, int(mx**(1/2))+1): | ||
if arr[i]: # i가 소수인 경우 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[i for i in range(len(arr)) if arr[I]] 해당 검사를 다시 len(arr) 만큼 해줘야하니 여기서 소수를 리스트에 하나씩 append 하는 형식으로 최적화를 할 수 있을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 그럼 새로운 리스트를 하나 만들어서 i를 append 해주고 해당 리스트를 반환하는 식으로 해야겠네요..!
감사합니다 우열님~!!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Woo-Yeol 에라토스테네스의 체는 소거법이기 때문에 일단 모든 수가 소수라고 가정 하고 순회하며 소수가 아닌 수들을 지워줘야 최종적으로 소수인 값들을 구할 수 있기 때문에 여기서 append는 해서 소수를 구하기는 어려울 것 같습니다.
다만 34번 라인의 주석을 i가 현재 소수로 표시되어있는 경우라고 바꿔주면 표현이 명확해질 수 있겠네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 제가 위에 코멘트 남긴게 pending으로 돼있었군요!
지수님 말씀하신 34번째 라인에서 i를 append해주는 것만으로도 위에 소수를 입력받는 list를 하나 만들어주면 가능해요!
return [i for i in range(len(arr)) if arr[i]] | ||
|
||
|
||
def find_partition(target: int, prime_number: List) -> List: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
투 포인터를 통해 접근하는 방법도 존재 할 수 있었군요! 저는 그냥 해시테이블을 통해서 있어야할 소수 값이 존재하는지를 확인하는 방식으로 접근하고 결과값의 최소 차이를 기억하는 방식을 사용했었는데 투 포인터를 사용하면 조금 더 시간 복잡도를 개선 할 수 있을 것 같습니다! 고생하셨습니다 수민님!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
에라토스테네스의 체를 활용한 깔끔한 풀이를 볼 수 있었습니다! 투포인터 부분에서 right를 target으로 두어도 좋을 것 같다는 의견이 있었습니다. 고생하셨습니다 수민님!
|
||
# 에라토스테네스의 체 | ||
for i in range(2, int(mx**(1/2))+1): | ||
if arr[i]: # i가 소수인 경우 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Woo-Yeol 에라토스테네스의 체는 소거법이기 때문에 일단 모든 수가 소수라고 가정 하고 순회하며 소수가 아닌 수들을 지워줘야 최종적으로 소수인 값들을 구할 수 있기 때문에 여기서 append는 해서 소수를 구하기는 어려울 것 같습니다.
다만 34번 라인의 주석을 i가 현재 소수로 표시되어있는 경우라고 바꿔주면 표현이 명확해질 수 있겠네요
target: 찾아야 하는 골드바흐 파티션의 합이 되는 짝수 | ||
prime_number: n까지의 소수 배열 | ||
""" | ||
left, right = 0, len(prime_number)-1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
right을 target으로 두어도 될 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
target은 실제 값이고 right은 끝인덱스를 의미하는거라 target으로 두면 안돼요 지수님!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
투포인터로 접근한 점이 새로운 것 같습니다!!
감사합니다 ~!
PR Summary
풀이 시간: 22분
<input>
t: 테스트케이스
n: 찾아야 하는 골드바흐 파티션의 합이 되는 짝수(4 ≤ n ≤ 10,000)
<solution>
합이 n이 되는 짝수를 어떻게 찾을 수 있을까?
<시간복잡도>
O(nlog(logn))
: 에라토스테네스의체find_parition 함수는 최대 O(n)
뭔가 더 최적화할 수 있는 방법이 있을 것 같은데 생각이 안남.... 여러분의 신박한 풀이 기다립니다..