This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-08-21] sumin #137 - #149

Merged
ksumini merged 5 commits into
mainfrom
sumin-#137
Aug 22, 2023
Merged

[2023-08-21] sumin #137#149
ksumini merged 5 commits into
mainfrom
sumin-#137

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 20분

<input>

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

<solution>

  1. n을 k진수로 변환
  2. 소수 판별

<시간복잡도>
O(log_k*n * √n)

@ksuminiksumini self-assigned this Aug 21, 2023
@ksumini
ksumini requested a review from Woo-Yeol as a code ownerAugust 21, 2023 04:00
@ksuminiksumini linked an issue Aug 21, 2023 that may be closed by this pull request

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

여기서 고인물 냄새가 나부렀어요 ㅋㅋㅋㅋ
풀이를 위해서 고민한 자와 풀이는 아는데 어떤걸로 할지 고민하신자가 이번 풀이에 너무 눈에 보였습니다 ㅋㅋㅋㅋ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@limstonestone 처음부터 끝까지 다 나누는게 무슨 뜻일까요?? 정확히 질문을 이해를 못 했어요 ㅠㅠㅠ

대충 제 뇌피셜로 도현님의 질문이,
"에라토스테네스의 체는 O(N log log N) 이니까 처음부터 끝까지 다 나누는 O(N)이 더 빠른거 아님?"
라고 생각하고 답을 써보자면..!

소수 판별을 할 때, 도현님이 작성하신 어떤 수 n이 소수인지 확인하는 방법은 2~√n까지 수로 나눴을 때 나눠지는 수가 있는지 확인하는 방식으로 시간복잡도가 O(√n)이 걸리죠? 그건 말 그대로 어떤 수 n 하나에 대해 소수인지 판별하는거죠!!
근데 여기서 문제는 n만 소수인지 확인하는 건 상관없지만, 1부터 n까지 중 소수가 몇 개인지를 구하는데 시간복잡도가 얼마나 걸릴까요? O(n * √n)이 걸리겠죠? 모든 수에 대해 소수인지 판별해야 하니까!!!

그럼 n이 1,000,000이면 O(n * √n)에 대해 연산횟수는 1,000,000 * 1,000 = 1,000,000,000 = 10억번 연산이니까 당연히 시간초과가 나겠죠?

그래서 나온게 에라토스테네스의체이고, 에라토스테네스의 체는 도현님이 알고 계신것처럼 O(N log log N) 의 시간복잡도를 가져요. 그럼 n이 1,000,000이라해도 약 4,316,983 정도의 연산횟수를 갖게되니 시간초과도 안나죠! (대신 메모리는 훨씬 많이 먹음)

결론은 제가 저기 주석을 안지워서 헷갈리셨을 것 같은데..😭(이 문제는 에라토스테네스의 체를 안써도됨)

1. 어떤 수 N이 소수인지 아닌지 판별할 때: 2~√n까지의 수로 나눠보는 방법 -> O(√n)
2. 여러 개의 수가 소수인지 아닌지를 판별할 때: 에라토스테네스의 체 -> O(N log log N)

이렇게 생각하시면 될 것 같습니다!

<추천문제>
image

+그래도 이해가 안되면 소수판별 방법이랑 에라토스테네스의 체 개념을 다시 공부하길..!
https://www.youtube.com/watch?v=9rLFFKmKzno

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

@zsmalla 엥 그러네용 ;; 처음에 문제를 대충 읽고 해당 수까지 소수의 개수가 몇 개인지 다 구하는 건줄 알고 에라토스테네스의 체로 코드를 짰다가 지웠는데 저 부분 주석이 안지웠네요 ㅠㅠ 시간복잡도에 작성된 것처럼 O(√n)의 시간복잡도로 해결 가능하고 지수님 말씀처럼 에라토스테네스의 체는 사용하지 않아도 됩니다!!!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

역시 빈문자열을 제외할 방법이 condition문을 제외하고는 어렵네요 ㅠ

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ㅋㅋㅋㅋㅋㅋ 고인물냄새
에라토스테네스 체 알고리즘의 시간복잡도가 O(N log log N) 이라고하는데 그럼 그냥 처음부터 끝까지 다 나누는게 더 빠른거 아닌가 생각이 드는데 이 방식이 더 빠르다고 해서요 ㅠㅠ
제가 잘못 이해한걸까요?

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

해당 방법은 제가 알고있는 에라토스테네스의 체 알고리즘이 아니라 일반적인 소수 판별 알고리즘같은데, 혹시 주석을 작성하시고 풀이를 바꾼 것이 맞으실까요? 저는 이번 문제에서 에라토스테네스의 체 방식은 굳이 필요 없다고 생각했습니다!

@ksumini

ksumini commented Aug 21, 2023

Copy link
Copy Markdown
ContributorAuthor

수민님 다운 깔끔한 풀이 잘 봤습니다! 혹시 다만 이 문제의 로직이 0으로 분할 후 소수 개수를 구한다는 로직에 달한다는 과정이 주석에 설명되어있다면 혹 처음 이 문제를 보는 사람에게 설명하기에 조금 더 좋을 것 같습니다! 고생 많으셨습니다 수민님! 시간 되실 때 코멘트 답변도 부탁드립니다~

@zsmalla님이 발견해주신 부분 반영해서 코드 다시 커밋해놨습니다 ~! 항상 꼼꼼한 리뷰 감사합니다 지수님!!!
PR하기 전에 좀 더 꼼꼼하게 주석을 다는 연습을 하겠습니다 😭

@ksumini
ksumini merged commit a974fae into mainAug 22, 2023
@ksumini
ksumini deleted the sumin-#137 branch August 22, 2023 01:23
Sign up for freeto 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.

[Programmers] k진수에서 소수 개수 구하기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone