Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-15] wooyeol #208 #229

Merged
merged 1 commit into from
Sep 15, 2023
Merged

[2023-09-15] wooyeol #208 #229

merged 1 commit into from
Sep 15, 2023

Conversation

Woo-Yeol
Copy link
Member

PR Summary

골드바흐의 추측

풀이시간
20:44 ~ 21:28 (44분)

문제 조건
4 <= N <= 10,000
2 <= target <= 10,000인 짝수

시간 복잡도 :
O(값 입력 + 에라토스테네스의 체 만들기 + 골드바흐의 파티션 찾기)

접근법
무슨 알고리즘으로 풀이 할 수 있을까? -> 구현

  1. 입력 받은 케이스 중 최대 값까지의 소수를 구하기 - 에라토스테네스의 체
  2. 골드바흐 파티션 찾기 -> 두 소수의 차이가 가장 작은 것을 출력
    • 가장 작은 소수 값부터 확인하며
    • 작은 소수 값이 먼저 나오며 target 값에서 작은 소수 값을 제외한 값이 소수일 경우 중
    • 두 소수의 차이가 최소일 경우 정답에 두 소수의 값 업데이트

@Woo-Yeol Woo-Yeol added the BOJ label Sep 14, 2023
@Woo-Yeol Woo-Yeol self-assigned this Sep 14, 2023
@Woo-Yeol Woo-Yeol linked an issue Sep 14, 2023 that may be closed by this pull request
@Woo-Yeol Woo-Yeol changed the title [2023-09-14] wooyeol #208 [2023-09-15] wooyeol #208 Sep 14, 2023
# 작은 소수 값이 먼저 나오며 target 값에서 작은 소수 값을 제외한 값이 소수일 경우 -> 골드바흐의 파티션
if (p_num <= target - p_num) and (target - p_num) in prime_numbers:
# 만약 두 소수의 차이가 최소일 경우 정답 업데이트
if target - (2 * p_num) < min_gap:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아..!
(target - p_num) - p_num = target - (2 * p_num)이라
두 소수의 차이를 이렇게 표현하신 거군요!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 제가 노트에 쓴 걸 옮겨적다보니 축약해서 적고 설명도 안 적었네요 ㅎㅎ 말씀해주신 내용이 맞습니다!

# 소수 중에서
for p_num in prime_numbers.keys():
# 작은 소수 값이 먼저 나오며 target 값에서 작은 소수 값을 제외한 값이 소수일 경우 -> 골드바흐의 파티션
if (p_num <= target - p_num) and (target - p_num) in prime_numbers:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 전체적으로 주석이 깔끔하고 이 부분을 딕셔너리로 처리할 생각을 정말 좋은 아이디어라고 생각해요!!
시간도 O(1) 밖에 들지 않고..! 좋은 풀이 감사합니다 우열님!👍👍

Copy link
Contributor

@zsmalla zsmalla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dictionary를 활용해서 정렬된 소수 리스트를 효율적으로 활용한 부분이 인상깊었던 풀이였습니다. 고생하셨습니다 우열님!

for idx, target in enumerate(targets):
min_gap = 100001
# 소수 중에서
for p_num in prime_numbers.keys():
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정렬되어있다면, 소수 크기(p_num)가 target을 넘어가면 break하는 로직을 추가해도 좋을 것 같습니다.

Copy link
Contributor

@limstonestone limstonestone left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 리스트와 셋 자료형을 같이 썼는데 딕셔너리 하나로 대체할 수 있겠네요~~!
감사합니다 !

@Woo-Yeol Woo-Yeol merged commit f98f19c into main Sep 15, 2023
@Woo-Yeol Woo-Yeol deleted the wooyeol-#208 branch September 15, 2023 15:34
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BOJ] 골드바흐의 추측
4 participants